天天看点

hibernate的实体生命周期

Hibernate中的实体在它的生命周期里,一共存在下面3种状态。

瞬时状态:用new 语句创建的实体对象就属于瞬时状态,它此时一般没有id值;如果没有变量对该对象进行引用,它将被java虚拟机回收,例如:

Person person =  new    Person(“furong”, “女”);

瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,他最大的特点就是没有主键。在Hibernate中,可通过Session的save()或saveOrUpdate()等方法将瞬时对象与数据库相关联,并将数据同步到数据库中,此时该顺势对象转变成持久化对象。

持久状态:存在于Session中的实体就属于持久化状态,一般通过save()、saveOrUpdate()等方法转换而来。处于该状态的对象在数据库中具有对应的记录,并拥有一个持久化表示。如果用Session的delete()方法,对应的持久化对象就变成瞬时状态,因数据库中的对应数据已被删除,该对象不再关联数据库的任何记录。当执行Session的close()或clear()、evict()之后,持久化对象转变为脱管对象。该对象虽然具有数据库识别值,但它已不在Hibernate持久成的管理之下了。

托管状态:当实体从Session中脱离出来的时候,它的状态就是脱管状态,尽管它具有ID值,但是他并不在Session中,即使对象数据发生变化,也不能同步到数据库中。通过调用close()、evict()等发发转换而来。当与某持久对象关联的Session被关闭后,该持久对转变为托管对象。当托管对象被重新关联到Session上时,并再次转变持久对象。脱管对象拥有数据库的识别值,可通过update()、saveOrUpdate()等方法转变成持久对象。

注:脱管对象拥有如下特点:本质上与瞬时对象相同,在没有任何变量引用它时,JVM在适当的时候将它回收,但是,它拥有主键。

hibernate的实体生命周期

继续阅读