JPA EntityManager为null

时间:2017-04-03 15:42:43

标签: hibernate jpa jboss

“我使用Jboss EAP 6.4.7并且应用程序需要访问使用H2数据库的Jboss中配置的数据源.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 :(得分: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。“