首页 文章

JPA EntityManager为null

提问于
浏览
0

“我使用Jboss EAP 6.4.7并且应用程序需要访问在Jboss中使用H2数据库配置的数据源.EntityManager没有在DAO层中设置并且返回null . 我感谢任何纠正或建议任何想法的帮助 . 不幸的是应用程序不使用Spring上下文,它将是普通的JPA-Hibernate模型来访问数据库 . “

下面是standalone.xml摘录 .

<datasource jta="false" jndi-name="java:/ecmConfigDS" pool-name="ecmConfigDS" enabled="true" use-ccm="true">
        <connection-url>jdbc:h2:tcp://localhost/~/ecmconfig</connection-url>
        <driver-class>org.h2.Driver</driver-class>
        <driver>h2</driver>
        <security>
        <user-name></user-name>
        </security>
</data source>

persistence.xml中

<persistence-unit name="ecmFunctionalRoute">
      <provider>org.hibernate.ejb.HibernatePersistence</provider>
      <non-jta-data-source>java:/ecmConfigDS</non-jta-data-source>
      <class>gov.ny.otda.ecm.sharedservices.dao.entity.FunctionRoute</class>
      <properties>
             <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
             <property name="hibernate.max_fetch_depth" value="3" />
             <property name="hibernate.hbm2ddl.auto" value="update" />
             <property name="hibernate.show_sql" value="true" />
       </properties>
</persistence-unit>

DAO.java

@PersistenceContext(unitName="ecmFunctionalRoute")
private EntityManager entityManager;
public E findByID(Long ID) throws DAOException {
      return entityManager.find(entityClass, ID);
}

1 回答

  • 0

    像下面这样更改你的persistence.xml:

    <persistence>
      <persistence-unit name="prod" transaction-type="JTA">
       <provider>org.hibernate.ejb.HibernatePersistence</provider>        
        <jta-data-source>java:/ecmConfigDS</jta-data-source>
        .....
      </persistence-unit>
    </persistence>
    

    并检查行为?

    transaction-type属性用于指定实体管理器工厂为持久性单元提供的实体管理器是否必须是JTA实体管理器或资源本地实体管理器 . 此元素的值为JTA或RESOURCE_LOCAL . 事务类型的JTA假定将提供JTA数据源 - 由jta-data-source元素指定或由容器提供 . 通常,在Java EE环境中,事务类型RESOURCE_LOCAL假定将提供非JTA数据源 . 在Java EE环境中,如果未指定此元素,则默认值为JTA . 在Java SE环境中,如果未指定此元素,则缺省值为RESOURCE_LOCAL . “

相关问题