我正在使用 IBM RAD 开发一些 JPA 实体,并从这些实体中开发相应的 JPA Manager Bean。管理器 bean(由 RAD 生成)具有以下成员:
@PersistenceUnit
private EntityManagerFactory emf;
我不确定如何从无状态 EJB (3.0) 正确实例化(或获取对)这个管理器 bean,所以我向管理器 bean 添加了一个构造函数,我可以将EntityManagerFactory
实例传递给它。EntityManagerFactory
我通过使用 `@PersistenceUnit' 注释在 EJB 中获得引用,如下所示:
@PersistenceUnit
private EntityManagerFactory _entityManagerFactory;
这似乎相当不必要,我相信必须有一种方法可以告诉容器(在我的情况下为 Websphere 7.0)以某种方式为我“引导”它,以便我立即获得对 JPA 管理器 bean 的引用。是吗?
更新: 看来我还不够详细。对此感到抱歉。
- 涉及三个对象:JPA 实体、JPA 实体管理器和无状态 EJB。
- JPA Entity Manager 类(不是 EJB)由 RAD 创建,并在其上具有方便的方法(命名查询)。它还定义了 member
@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) 我可能会丢失。