1 Hibernate架构
……
5 持久化上下文
org.hibernate.Session API、javax.persistence.EntityManager API这两个API代表了处理持久性数据的上下文。持久性数据具有与持久性上下文和底层数据库相关的状态。状态如下:
-
transient(or new)-瞬时态
实体刚刚被实例化,并且与持久化上下文无关。它在数据库中没有持久表示,并且通常没有分配标识符值即id(除非使用了指定的生成器)。 -
persistent(or managed)-持久态
该实体具有关联的标识符并与持久性上下文相关联。它可能存在或可能不存在于数据库中。 -
detached-游离态
该实体具有关联的标识符,但不再与持久性上下文关联(通常是因为持久性上下文已关闭或实例已从上下文中逐出) -
removed-移除态(新增状态)
该实体具有关联的标识符并与持久性上下文相关联,但是,它被安排从数据库中删除。
状态 | 有无id | 是否与持久性上下文关联 | 是否存在于持久性上下文中 | 是否存在于数据库 |
---|---|---|---|---|
transient | 通常无,除非使用了指定的生成器 | 否 | 否 | 否 |
persistent | 有 | 是 | 是 | 可能存在也可能不存在 |
detached | 有 | 否 | 否 | / |
removed | 有 | 是 | 可能存在也可能不存在 | 是,数据库计划删除 |
各状态转换图如下:
5.1 从JPA访问Hibernate API
从JPA访问Hibernate API
Session session = entityManager.unwrap( Session.class );
SessionImplementor sessionImplementor = entityManager
.unw