2011-12-02 42 views
2

我想在我的TomEE Plus中设置JPA。我有我的persistence.xml如下TomEE Plus和JPA

<persistence-unit name="test" transaction-type="JTA"> 
    <jta-data-source>jdbc/testDB</jta-data-source> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.TestEntity</class> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
    </persistence-unit> 

当我部署我的应用程序,我看不到控制台中的任何错误。我还可以看到将PU绑定到JNDI的日志。

但是在DB中没有创建表。

有些人可以帮我吗?

+0

为什么你有两个互相嵌套的? –

+0

对不起,这是一个错字。更正它。 – user667022

回答

1

如果在persistence.xml中未指定<provider>,那么容器将使用其默认持久性提供程序。对于TomEE,其默认持久性提供程序是OpenJPA。

<properties>应与您使用的持久性提供程序匹配。

所以,如果你正在使用的OpenJPA,您persistence.xml应该是这样的:(OpenJPA中的<properties>可以在here找到)

<persistence-unit name="test" transaction-type="JTA"> 
    <jta-data-source>jdbc/testDB</jta-data-source> 
    <class>com.TestEntity</class> 
    <properties> 
      <property name="openjpa.jdbc.DBDictionary" value="mysql"/> 
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> 
     </properties> 
    </persistence-unit> 

如果你想使用Hibernate作为持久性提供,您persistence.xml应该是这样的:

<persistence-unit name="test" transaction-type="JTA"> 
    <jta-data-source>jdbc/testDB</jta-data-source> 
    <provider>org.hibernate.ejb.HibernatePersistence</provider> 
    <class>com.TestEntity</class> 
    <properties> 
     <property name="hibernate.hbm2ddl.auto" value="update" /> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.show_sql" value="true" /> 
    </properties> 
    </persistence-unit> 
+0

我不认为这是必需的。 JPA 2.0规范:“提供者元素是** optional **,但应该指定应用程序是否依赖于正在使用的特定持久性提供者。” –

+0

由于OP发布的'persistence.xml'包含hibernate指定的属性,所以我猜他使用hibernate作为持久性提供者 –

+0

我将它理解为:容器将为您提供其默认JPA提供程序,但如果您想要一些特定的(比如EclipseLink),而不是在''中定义它。你认为肯? –

1

如果您正在使用附带TomEE(OpenJPA中)的默认JPA实现,而不是休眠,你应该:

<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>