CMT上的EntityManager查找

时间:2012-01-12 23:24:56

标签: hibernate java-ee entitymanager

我怀疑很久没有找到答案,所以我感谢任何帮助或解释之王...也许这只是一个概念上的错误...

我有一个使用CMT和Hibernate的环境。我可以将EntityManager作为资源注入我的EJB而没有任何问题。但我无法直接在我的DAO中注入,因为我用传统的工厂模式实例化它......

但我的问题是:我需要使用EntityManager,但不想将它一直传递到我的图层!必须有另一种方式,我可能没有看到解决方案......

我可以为这个EntityManager做一些上下文查找之王吗?还是其他更优雅的解决方案?

我做了我自己的解决方案,但它的那种废话大声笑......不值得讨论...

感谢任何帮助,对于任何英语错误感到抱歉,这不是我的母语。

1 个答案:

答案 0 :(得分:0)

即使遵循JBNizet,我仍然很想知道如何获取EntityManager,我在如何在J2EE / EJB环境中查找EntityManager时找到了这个答案。

首先,您需要在EJB的类范围上放置@PersistentContext,以便为以后的查找设置def并定义“name”属性。像:

@PersistenceContext(
name="myEntityManagerJNDIName",
unitName=InventoryManagement  // defined in a persistence.xml file
)
@Stateless
public class InventoryManagerBean implements InventoryManager { ... }

然后,您可以使用以下代码查找您的EntityManager:

...
// obtain the initial JNDI context
Context initCtx = new InitialContext();
// perform JNDI lookup to obtain container-managed entity manager
javax.persistence.EntityManager entityManager = (javax.persistence.EntityManager) 
   initCtx.lookup("java:comp/env/myEntityManagerJNDIName");
...

这就是我发现在没有注射的情况下获取EntityManager的方式。