gpt4 book ai didi

java - 'correct' 实例化JPA管理器bean的方法?

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:37 26 4
gpt4 key购买 nike

我正在使用 IBM RAD 开发一些 JPA 实体,并从中开发相应的 JPA Manager Bean。管理器 bean(由 RAD 生成)具有以下成员:

@PersistenceUnit
private EntityManagerFactory emf;

我不确定如何从无状态 EJB (3.0) 正确实例化(或获取对此管理器 bean 的引用),因此我向管理器 bean 添加了一个构造函数,可以将 EntityManagerFactory 实例传递给它。我通过使用“@PersistenceUnit”注释在 EJB 中获取对 EntityManagerFactory 的引用,如下所示:

@PersistenceUnit
private EntityManagerFactory _entityManagerFactory;

这似乎没有必要,我相信必须有一种方法来告诉容器(在我的例子中是 Websphere 7.0)以某种方式为我“引导”它,以便我立即获得对 JPA 管理器 bean 的引用。是吗?

更新:看来我说的还不够详细。对此感到抱歉。

  • 涉及三个对象:JPA 实体、JPA 实体管理器和无状态 EJB。
  • JPA 实体管理器类(不是 EJB)由 RAD 创建,并具有方便的方法(命名查询)。它还定义了成员@PersistenceUnit private EntityManagerFactory emf。我知道我可以直接使用 EntityManager,但我想使用 MyEntityManager,因为它的方法很方便。
  • 我可以通过使用上述注释(也像 Bozho 建议的那样)在无状态 EJB 中获取对 EntityManager 或 EntityManagerFactory 的引用
  • 我想在无状态 EJB 中获取对 JPA 实体管理器的引用。如果我“新建”它(new MyEntityManager()),则 emf 字段为空。解决方法是在 EJB 中声明 @PersistenceUnit 字段,然后将其传递给 JPA 实体管理器并使用它。
  • 想一想,也许我可以将 JPA 实体管理器声明为 EJB 并完成它......(尽管这又似乎没有必要)。我认为有一个类似于 PersistenceContext.getJpaManager(MyEntityManager.class) 的方法,我可能缺少它。

最佳答案

@PersistenceContext
private EntityManager em;

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

@EJB
private MyEntityManager em;

关于java - 'correct' 实例化JPA管理器bean的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com