Hibernate中的持久化上下文与Entity对象的状态

Hibernate实质上是一种ORM的解决方案。在这种ORM中,与关系数据库中存储的数据相对应的,就是Hibernate中的持久化上下文中的对象。

数据库中的数据由关系数据库维护,Hibernate中的对象由持久化上下文维护。

在Hibernate中,提供了两种持久化上下文的实现,一种是Hibernate自身提供的Native API,即org.hibernate.Session。另一种是Hibernate实现的JPA API,即javax.persistence.EntityManager。


关系数据库与持久化上下文一起,就构成了持久化数据(即Entity对象)的生存环境。在这个生存环境中,不同时刻一个Entity对象可能具有不同的状态。事实上,持久化上下文的主要目的就是操作Entity对象的状态。

Entity对象的状态

  • transient
Entity实例已经被初始化,但是未与Session关联,Entity实例中没有标识符
在数据库中没有与Entity实例对应的记录
通过Session的save()、persist()方法与Session关联,并转换为persistent状态
  • managed/persistent
Entity实例与Session关联,并且有了标识符
数据库中未必有对应的记录,因为可能只是在缓存中,为持久化
在Session结束时或者调用Session的flush()方法,Entity实例同步持久化到数据库
  • detached
Entity实例未与Session关联,但有标识符
数据库中有对应的记录
可以调用Session的update()、merge()方法再次与Session关联,并转换为persistent状态
  • removed
Entity实例与Session关联,并且有标识符,但是将会被Session删除
数据库中有对应的记录,但是将会被数据库删除



版权声明:本文为taiyangdao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。