Hibernate之持久化对象
Posted WWWYC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate之持久化对象相关的知识,希望对你有一定的参考价值。
时间:2017-1-19 23:00
——Hibernate持久化类的状态
1、持久化类:就是一个实体类与数据库建立了映射。
2、Hibernate为了方便管理持久化类,将持久化类分为了三种状态:
1)瞬时态:transient(临时态)
2)持久态:persistent
3)脱管态:detached(离线态)
——三种持久化对象的状态
1、三种持久化对象的状态
1)瞬时态
不存在持久化标识OID,尚未与Hibernate Session关联对象,被认为处于瞬时状态,失去引用将被JVM回收。
无持久化标识OID,未与Session关联。
2)持久态
存在持久化标识OID,与当前Session有关联,并且关联的Session没有关闭,事务未提交。
存在持久化标识OID,与Session关联。
持久化对象有自动更新数据库的能力。
3)脱管态
存在持久化OID,但没有与当前Session关联,脱管状态改变时Hibernate无法检测。
存在持久化标识OID,未与Session关联。
2、区分三种持久化对象的状态
示例代码:
3、三种状态对象的转换
瞬时态:
Book book = new Book();
1)瞬时态 ——> 持久态
Book book = new Book();
session.save(book);
2)瞬时态 ——> 脱管态
book.setId(1); // 设置OID
持久态:
Book book = (Book)session.get(Book.class, 1);
get() / load() / find() iterate()
1)持久态 ——> 瞬时态
session.delete(book); // 删掉之后就没有OID了
2)持久态 ——> 脱管态
session.close()
clear() / evict(book) 将Session中的指定对象删除。
脱管态:
Book book = new Book();
book.setId(1);
1)脱管 ——> 持久
session.update(book);
2)脱管 ——> 瞬时
book.setId(null);
——持久态对象自动更新数据库
示例代码:
——总结
1、Hibernate持久化对象的状态:
* 瞬时态
没有唯一标识OID,没有与Session关联
* 持久态
有唯一标识OID,与Session关联
* 脱管态
有唯一标识OID,没有与Session关联
2、瞬时态对象
User user = new User()
瞬时态-->持久态
session.save(user)
瞬时态-->脱管态
user.setId(1)
3、持久态对象
get() / load()
持久态-->瞬时态
session.delete(Object)
持久态-->脱管态
session.close() / session.clear() / session.evice()
4、脱管态
User user = new User();
user.setId(1)
脱管态-->瞬时态
user.setId(null)
脱管态-->持久态
save() / saveOrUpdate()
以上是关于Hibernate之持久化对象的主要内容,如果未能解决你的问题,请参考以下文章