【问题标题】:How do you create an EntityManager when you are unsure of the unit name?当您不确定单位名称时,如何创建 EntityManager?
【发布时间】:2010-11-27 17:36:20
【问题描述】:

我需要在运行时确定 EntityManager 的单元名称。

例如,我想做这样的事情:

@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;

但是,注释无法做到这一点。

如果在运行时不确定单元名称是什么,是否可以创建 EntityManager?

【问题讨论】:

    标签: java jpa jakarta-ee jpa-2.0 java-ee-6


    【解决方案1】:

    可以在运行时指定持久性单元 (PU) 名称,但这是用于创建 EntityManagerFactory 的参数,而不是单独的 EntityManager。有关 Persistence 类方法 createEntityManagerFactory() 的信息,请参见 Javadoc。示例:

    EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname);
    EntityManager em = emf.createEntityManager();
    // ...
    

    我在非 Java EE 应用程序中执行此操作(在 Tomcat 托管的 Web 应用程序中使用 Java 6 SE 调用),但我不确定您如何在容器管理的 Java EE 6 应用程序中执行相同操作。这是可能的。

    【讨论】:

      【解决方案2】:

      这里你必须手动创建 entityManager 而不使用通过 JNDI 的注解在运行时将其指向不同的持久单元。

      public EntityManager initializeEM(String pUnitName){
      
      Context iCtx = new InitialContext();
      String lookUpString = "java:comp/env/persistence/"+pUnitName;
      javax.persistence.EntityManager entityManager =
                      (javax.persistence.EntityManager)iCtx.lookup(lookUpString);
      
      return entityManager;
      }
      

      【讨论】:

        猜你喜欢
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 2012-12-09
        • 2013-06-22
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        相关资源
        最近更新 更多