论坛首页 Java企业应用论坛

这样的对象是否持久化了呢?

浏览 21311 次
该帖已经被评为精华帖
作者 正文
   发表时间: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状态 的对象是什么样的阿?我好像没遇到过,能举个例子么?
0 请登录后投票
   发表时间: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);;


这种形式。

希望能得到你的指点,谢谢
0 请登录后投票
   发表时间: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里面
0 请登录后投票
   发表时间:2004-10-15  
这个问题,只能说hibernate就是这样做的,假如你用了级联删除,那么你要保证对象是与数据库一致的。通过load也行,通过new setId也行。
0 请登录后投票
   发表时间:2004-10-15  
引用
在3.0的manaul里 Instance states正式分为T/P/D三种state了



这三种状态都指什么啊?  和前面说的PO的三种状态是一回事么?
0 请登录后投票
   发表时间:2004-10-29  
hehe,如果你铁了心不顾后果的要删的话
session.delete("from XX where xx.xx_id=?", xx_id, Hibernate.LONG);
0 请登录后投票
   发表时间:2004-10-29  
慕容姐姐 写道
引用
在3.0的manaul里 Instance states正式分为T/P/D三种state了



这三种状态都指什么啊?  和前面说的PO的三种状态是一回事么?


这里是我的关于这三种状态的学习笔记,可以参考一下:
http://mochow.blogdriver.com/mochow/336253.html

至于具体的就要看hibernate in action这本书了。
0 请登录后投票
   发表时间:2007-01-18  
受用了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics