您的位置:首页 > 其它

Hibernate对象的3种状态

2015-09-23 15:36 260 查看
Hibernate对象的3种状态:

1,临时状态(Transient):
与数据库没有对应,跟Session没有关联。
一般是新new出的对象。
2,持久化状态(Persistent):
对象在Session的管理之中,最终会有对应的数据库记录。
特点:有ID,并且对对象的修改会同步到数据库。
3,游离状态(Detached,又叫脱管状态):
数据库中有对应记录,但对象不在Session管理之中。
修改此状态对象时数据库不会有变化。

Session中的对象是:内存中的对象的引用,Session关闭后,内存中的对象还存在。
a)transient:内存中一个对象,没ID,缓存中也没有
b)persistent:内存中有,缓存中有,数据库有
c)detached:内存有,缓存没有,数据库有

对象状态间的转换:
save():把临时状态变为持久化状态(交给Sessioin管理),生成:insert into ...语句
update():把游离状态变为持久化状态,生成:update ...
saveOrUpdate():把临时或游离状态转为持久化状态,生成:insert into 或 update ...语句
注:本方法是根据id判断对象是什么状态的:如果id为原始值(对象的是null,原始类型数字是0)就是临时状态,如果不是原始值就是游离状态。
get():获取数据,是持久化状态,生成:select ... where id=? 语句,并且会马上执行SQL语句
load():获取数据,是持久化状态,生成:select ... where id=? 语句,是否马上执行SQL语句,取决于lazy的取值。
delete():从数据库里删对象,缓存也会被清除,把持久化转为临时状态,生成:delete ... 语句
evict()、clear()、close()把持久化状态转换为游离状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: