entitymanager_实体管理器的类型:应用程序管理的EntityManager

entitymanager

JPA规范定义了几种类型的EntityManagers / Persistence Context。 我们可以有:

  • 扩展和事务范围的EntityManager,
  • 容器管理或应用程序管理的EntityManager。
  • JTA或本地资源EntityManager,

除了上述区别之外,我们还可以在其中存在EntityManager / Persistence Context的两个主要上下文– Java EEJava SE 。 并非每个选项都适用于Java EE,并且并非每个选项都适用于Java SE。 在本文的其余部分中, 我将介绍Java EE环境

好的,因此在继续本文之前的主题之前(这是使用EntityManagerFactory手动创建的Java EE中EntityManager的行为),我们仅简要介绍一下上述EM类型。

扩展与事务范围

此功能告诉我们EntityManager的操作是否可能跨越多个事务。 默认情况下,使用事务性持久性上下文,这意味着当提交当前事务时,将清除所有更改,并分离所有受管实体。 扩展范围仅适用于有状态EJB。 这非常有意义,因为SFSB可以保存状态,因此不必终止一种业务方法就意味着结束事务。 使用SLSB的情况就不同了–我们有业务方法必须在业务方法完成时结束,因为在下一次调用中,我们不知道我们将以哪个EJB实例结束。 SLSB仅允许使用事务范围的EntityManager。 您可以控制在EntityManager注入期间EntityManager是扩展的还是事务的:

@PersistenceContext(type=javax.persistence.PersistenceContextType.EXTENDED)
EntityManager em;

默认情况下为javax.persistence.PersistenceContextType.TRANSACTION 。 附带说明–使用扩展的EntityManager可能使您可以创建一些有趣的解决方案; 看看具有事务性保存方法技巧的 Adam Bien的无事务bean 。 他使用这种方法使事务开始和结束时自动清除所有更改(并且他实际上通过调用特殊的人工方法来做到这一点。)仅在容器管理的EntityManagers的情况下才允许扩展和事务范围的PersistenceContext。

容器管理与应用程序管理

在大多数Java EE应用程序中,您只是使用@PersistenceContext注入EntityManager,如下所示:

@PersistenceContext
EntityManager em;

实际上,这意味着您要让容器为您的EntityManager注入 (容器是在后台从EntityManagerFactory创建的。)这意味着EntityManager是由容器管理的。 另外,您可以从EntityManagerFactory自己创建EntityManager。 您可以通过注入获得它:

@PersistenceUnit
EntityManagerFactory emf;

然后,要获取EntityM

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值