The 'correct' way to instantiate JPA manager bean?
我正在使用 IBM RAD 开发一些 JPA 实体,并从这些实体中开发相应的 JPA Manager Bean。管理器 bean(由 RAD 生成)具有以下成员:
1 2 | @PersistenceUnit private EntityManagerFactory emf; |
我不确定如何从无状态 EJB (3.0) 正确实例化(或获取对)此管理器 bean,因此我向管理器 bean 添加了一个构造函数,我可以在其中传递
1 2 | @PersistenceUnit private EntityManagerFactory _entityManagerFactory; |
这似乎相当不必要,我相信必须有一种方法告诉容器(在我的例子中是 Websphere 7.0)以某种方式为我"引导",以便我立即获得对 JPA 管理器 bean 的引用。是吗?
更新:
看来我还不够详细。对不起。
- 涉及三个对象:JPA 实体、JPA 实体管理器和无状态 EJB。
-
JPA Entity Manager 类(不是 EJB)由 RAD 创建,并在其上具有方便的方法(命名查询)。它还定义了成员
@PersistenceUnit private EntityManagerFactory emf 。我知道我可以直接使用EntityManager ,但我想使用 MyEntityManager 来获得它的便利方法。 - 我可以通过使用上述注释在无状态 EJB 中获得对 EntityManager 或 EntityManagerFactory 的引用(也像 Bozho 建议的那样)
- 我想在无状态 EJB 中获得对 JPA Entity Manager 的引用。如果我"新建"它(new MyEntityManager()),则 emf 字段为空。解决方法是在 EJB 中声明 @PersistenceUnit 字段,然后将其传递给 JPA 实体管理器并使用它。
- 想一想,也许我可以将 JPA 实体管理器声明为 EJB 并完成它......(尽管这似乎又是不必要的)。我认为有一种方法 PersistenceContext.getJpaManager(MyEntityManager.class) 我可能会丢失。
1 2 | @PersistenceContext private EntityManager em; |
看来你有你的自定义 bean 想要注入到其他 bean 中(它至少需要一个本地接口):
1 2 | @EJB private MyEntityManager em; |