Hibernate对象状态及其转换机制.pdfVIP

  • 0
  • 0
  • 约2.15千字
  • 约 3页
  • 2026-01-27 发布于北京
  • 举报

Hibernate学习:Hibernate对象状态及转换

一.Session的参与

1.普通对象就两种状态:new出一个对象,还有生命的状态;不被任何变量

,被GC回收,状态。

2.本文讨论的三种状态:在hibernatesession的干预下,在这个对象和数

据库的某条记录相关联的条件下,“new出一个对象,还有生命的状态”

会演变成三种更加具体的状态:临时状态transient,持久化状态

persistent,游离状态detached。

二.临时状态

刚刚new出一个实体对象的时候,该对象未和任一条数据库记录想关

联(也就是对象未和任何一个session相关联,对象没有主键这一持久化标识),

此时的状态时临时状态。

1.临时状态的特点:

1.未和任何session相关联。

2.未和任一条数据库记录相关联。

2.临时状态的转换

1.new一个对象,此对象处于临时状态。

2.session.delete(持久化对象或者游离状态对象)时,持久化对象或

者游离状态对象变成临时状态对象。对于持久化对象,delete删

除其在数据库对应的记录,并删除此对象在session中的缓存;对

于游离态对象,delete删除其在数据库对应的记录。

三.持久化状态

持久化对象是指实体对象处于由Hibernate框架所管理的状态,实

体对象被纳入Hibernate实体容器中加以管理。

1.持久化状态的特点

1.持久对象总是与Session和Transaction相关联,在一个Session

中,对持久对象的改变不会马上对数据库进行变更,而必须在

Transaction终止,也就是执行commit()才在数据库中真正运

行SQL进行变更,持久对象的数据才会与数据库进行同步。同步之

前的持久对象称为脏(dirty)对象

2.数据库里面有某一条记录与持久化对象相对应。

2.持久化状态的转换

1.session的save()方法把对象从临时状态转换成持久化状态。

2.session的load()方法和get()方法返回的对象也是持久化状态。

3.session的find()方法返回的list对象也是持久化状态。

4.session的update()saveorUpdate()lock()方法是对象从游离状

态转换持久化状态。

5.一个持久化状态对象级联一个临时状态对象,保存这个持久化状态

时,同时会保存这个临时状态,临时状态对象转换成持久化状态对

象。

四.游离状态

与持久对象关联的session被关闭后,对象就变成游离状态。

1.游离状态的特点

1.不被任何session关联;如果没有变量此对象的情况下,GC

回收此对象。这个和临时状态是一样的。

2.比临时状态多了一个与数据库标识的OID。

2.游离状态的转换

1.session.close()方法,finally里面会调用

persistenceContext.clear(),导致session的缓存被清空,所有

的持久化对象变成游离态对象。

2.session.evict(Objectobj)方法,清空一个对象,该对象由持久

态变成游离态。当session中保存了大量缓存对象时,手动调用

evict(Objectob)方法可以减少缓存,但不推荐。

3.

文档评论(0)

1亿VIP精品文档

相关文档