1

我正在使用 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) 我可能会丢失。
4

1 回答 1

1
@PersistenceContext
private EntityManager em;

看来您有要注入其他 bean 的自定义 bean(它至少需要一个本地接口):

@EJB
private MyEntityManager em;
于 2011-05-16T14:27:46.940 回答