在JPA

2014-07-20 25 views
0
添加記錄之前如何創建H2表

我的項目涉及JPA和我persistence.xml文件下列在JPA

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 
    <persistence-unit name="rest-jpa"> 
     <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> 
     <jta-data-source>java:/comp/env/jdbc/restDB</jta-data-source> 
     <class>org.wso2.as.ee.Student</class> 
     <properties> 
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

我H2數據庫是一個內存數據庫。

當我在添加一條記錄之前嘗試查找某個記錄時,它會給出一個沒有找到的表的錯誤。我認爲只有在向數據庫添加記錄時才創建表。如何在添加任何記錄之前創建表格?

回答

1

您可以使用以下JPA屬性:

生成,每次執行DROP TABLECREATE TABLE腳本在運行應用程序:在創建數據庫之後

  • javax.persistence.schema-generation.database.action=drop-and-create

加載一些預定義的數據:

  • javax.persistence.sql-load-script-source="META-INF/loadData.ddl"

創建架構應該被延遲,直到一個實體使用(至少在使用JPA的情況下),所以你可以使用它保證這種行爲JPA屬性。如果您仍然發現此行爲發生,您應該在您的JPA提供程序錯誤跟蹤程序中創建一個錯誤消息。

+0

非常感謝。這解決了這個問題。 –

+0

我使用的是OpenJPA,它現在支持JPA 2.0規範。此屬性來自JPA 2.1。 –

+0

@callkalpa對於任何JPA 2.1之前的實現,您應該使用供應商特定的屬性。對於'OpenJPA',你可以看到這個URL:http://openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/ref_guide_mapping.html。請注意,當'openjpa.jdbc.SynchronizeMappings'屬性可以完成它的工作時,也會提到:'當應用程序獲得它的第一個EntityManager時,OpenJPA將在這些類上運行映射工具。沒有其他方法可以自動執行它(除非使用'java org.apache.openjpa.jdbc.meta.MappingTool' - 這在文檔中也有提到)。 –