TomEE Plus和JPA
我想在我的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中没有创建表。
有些人可以帮我吗?
如果在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>
我不认为这是必需的。 JPA 2.0规范:“提供者元素是** optional **,但应该指定应用程序是否依赖于正在使用的特定持久性提供者。” –
由于OP发布的'persistence.xml'包含hibernate指定的属性,所以我猜他使用hibernate作为持久性提供者 –
我将它理解为:容器将为您提供其默认JPA提供程序,但如果您想要一些特定的(比如EclipseLink),而不是在'
如果您正在使用附带TomEE(OpenJPA中)的默认JPA实现,而不是休眠,你应该:
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
为什么你有两个互相嵌套的? –
对不起,这是一个错字。更正它。 – user667022