锁定老帖子 主题:这样的对象是否持久化了呢?
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2004-10-15
drnstar 写道 通过Parent p = new Parent(); 声明出来的 Parent对象只是处于Transient状态而不是Persistent状态 ,只有在Persistent状态的对象才可以执行delete操作,而用get或load得到的直接就是Persistent状态 的对象,而在Transient状态的对象只有通过 saveOrUpdate或者update才能转换到persistent状态,如果利用上面的new Parent()得到的对象,可能会equal persistent状态的对象,但绝对不是==persistent状态的对象。
用load得到的就是Persistent状态 的对象这个我懂,用get得到的Persistent状态 的对象是什么样的阿?我好像没遇到过,能举个例子么? |
|
返回顶楼 | |
发表时间:2004-10-15
downpour 写道 同样执行删除操作,Hibernate会报错,并且告诉我有外键的约束。
你这里的p是个Parent类,它下面还有Child类,因此如果这样写代码 1 2 Parent p = new Parent();; 3 p.setId(pid);; 4 p.setName(name);; 5 6 session.delete(p);; 你说会Hibernate会报错,并且告诉我有外键的约束. 我接触hibernate不久,想请问你,如果这个名叫"Parent"的类,它不是个父类,只是个普通的类,或者我再举个例子(Sysuser没有Child类) 1 2 Sysuser sysuser = new Sysuser();; 3 sysuser.setUserid(userid);; 4 sysuser.setUsername(username);; 5 6 session.delete(sysuser );; 这时候会抱错么? 我之前删除一个类都是用 Sysuser sysuser = (Sysuser);session.load(Sysuser.class,userid);; session.delete(sysuser);; 这种形式。 希望能得到你的指点,谢谢 |
|
返回顶楼 | |
发表时间:2004-10-15
慕容姐姐 写道 drnstar 写道 通过Parent p = new Parent(); 声明出来的 Parent对象只是处于Transient状态而不是Persistent状态 ,只有在Persistent状态的对象才可以执行delete操作,而用get或load得到的直接就是Persistent状态 的对象,而在Transient状态的对象只有通过 saveOrUpdate或者update才能转换到persistent状态,如果利用上面的new Parent()得到的对象,可能会equal persistent状态的对象,但绝对不是==persistent状态的对象。
用load得到的就是Persistent状态 的对象这个我懂,用get得到的Persistent状态 的对象是什么样的阿?我好像没遇到过,能举个例子么? get是many-to-one或者 one-to-one 中的getter方法 比如child中的getParent() 还有楼上的兄弟说的 PO1 a=session.load(PO1.class,id); PO1 b=session.load(PO1.class,id); 同样session load方法的PO是指向同一object的 但是如果其中一个是通过其他po的get方法取出来的时候 这两者是指向不同对象的 在3.0的manaul里 Instance states正式分为T/P/D三种state了 衷心希望hibernate不要把所有的state处理都写到API里面 |
|
返回顶楼 | |
发表时间:2004-10-15
这个问题,只能说hibernate就是这样做的,假如你用了级联删除,那么你要保证对象是与数据库一致的。通过load也行,通过new setId也行。
|
|
返回顶楼 | |
发表时间:2004-10-15
引用 在3.0的manaul里 Instance states正式分为T/P/D三种state了
这三种状态都指什么啊? 和前面说的PO的三种状态是一回事么? |
|
返回顶楼 | |
发表时间:2004-10-29
hehe,如果你铁了心不顾后果的要删的话
session.delete("from XX where xx.xx_id=?", xx_id, Hibernate.LONG); |
|
返回顶楼 | |
发表时间:2004-10-29
慕容姐姐 写道 引用 在3.0的manaul里 Instance states正式分为T/P/D三种state了
这三种状态都指什么啊? 和前面说的PO的三种状态是一回事么? 这里是我的关于这三种状态的学习笔记,可以参考一下: http://mochow.blogdriver.com/mochow/336253.html 至于具体的就要看hibernate in action这本书了。 |
|
返回顶楼 | |
发表时间:2007-01-18
受用了
|
|
返回顶楼 | |