您的位置:首页 > 编程语言 > Java开发

Hibernate持久化对象存在三种状态

2015-11-23 11:56 274 查看
Hibernate持久化对象存在三种状态

瞬时态 transient  
尚未与Hibernate Session关联对象,被认为处于瞬时状态,失去引用将被JVM回收
无持久化标识OID,未与Session关联

持久态 persistent
数据库中有数据与之对应并与当前session有关联,
并且相关联的session没有关闭数据库并且事务未提交

存在持久化标识OID,与Session关联

脱管态 detached 数据库中有数据与之对应,
但当前没有session与之关联,脱管状态改变hibernate不能检测到

存在持久化标识OID,未与Session关联

* Hibernate持久化对象存在三种状态

1)瞬时(临时):没有与session关联,没有持久化标志OID(OID 为null)

2)持久: 与session关联,有持久化标志OID

3)托管(离线): 没有与session关联,有持久化标志OID

* 对象的状态是可以相互转化的

* 如何直接获得一个瞬时对象:User user = new User();

瞬时---》持久对象  session.save(user);session.saveOrUpdate(user);

瞬时---》托管对象  user.setId(1);

* 如何直接获得一个持久对象:session.get(User.class,1);session.load(User.class,1);query.list();---所有的查询方法获得的对象都是持久对象

持久---》瞬时对象  session.delete(user);

持久---》托管对象  session.close();session.clear();session.evict(user);---清理缓存

* 如何直接获得一个托管对象:没有办法直接获得托管,必须由其他对象转化

托管---》瞬时对象  user.setId(null);

托管---》持久对象  session.update(user);session.saveOrUpdate(user);

* 所有的持久对象都被session的一级缓存引用,持久对象就是缓存中的对象

* 持久对象拥有自动更新数据库的能力,由于快照区的存在

* Session的一级缓存,缓存的是对象的地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java hibernate