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的save()、persist()方法与Session关联,并转换为persistent状态
- managed/persistent
数据库中未必有对应的记录,因为可能只是在缓存中,为持久化
在Session结束时或者调用Session的flush()方法,Entity实例同步持久化到数据库
- detached
数据库中有对应的记录
可以调用Session的update()、merge()方法再次与Session关联,并转换为persistent状态
- removed
数据库中有对应的记录,但是将会被数据库删除