2011-12-02 109 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>