一个容器管理的 persistence context (即 container-managed persistence context)可以被限定
为单个事务范围,或,扩展其生存期跨越多个事务!这取决于当它的 entity manager 被创建
的 时 候 所 定 义 的 PersistenceContextType 类 型 。 它 可 以 取 值 为 TRANSACTION 和
EXTENDED。可称为:事务范围的 persistence context 或扩展的 persistence context。
Persistence context 总是会关联到一个 entity manager factory。
- Transaction-scope persistence context
当 entity manager 的方法被调用的时候,如果在当前 JTA 事务中还没有 persistence context,
那么将启动一个新的 persistence context ,并将它跟当前的 JTA 事务关联。
- Extended persistence context
扩展的 persistence context 总是跟 stateful session bean 绑定在一起。当在 stateful session bean
中注入 entity manager,并定义为 extended persistence context 时,从我们开始调用 stateful
session bean 开始,直到 stateful session bean 被销毁(移除)!通常,这可以通过调用一个
在 stateful session bean 中被注解定义为@Remove 的方法来结束一个 stateful session bean 的
生命周期。
Application-Managed Persistence Context
即当我们自己创建 EntityManager 的时候,我们通过 entityManager.close() / isOpen()方法来
管理 entityManager 及其对应的 persistence context.
实体对象的生命周期
几种类型:New,managed,detached,removed
New – 即未有 id 值,尚未跟 persistence context 建立关联的对象
Managed – 有 id 值,已跟 persistence context 建立了关联
Detached – 有 id 值,但没有(或不再)跟 persistence context 建立关联
Removed – 有 id 值,而且跟 persistence context 尚有关联,但已准备好要从数据库中把它删
除。
EntityManager 的接口方法