[英]Liquibase + JPA: Run order
我有一個Java項目,其中使用JPA進行持久化。 現在,我想將LiquiBase集成到我的項目中,但是我不知道如何更改JPA / Liquibase的執行順序。
為了清楚起見:到目前為止,我的persistence.xml看起來像這樣:
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value=.../>
<property name="javax.persistence.jdbc.user" value=.../>
<property name="eclipselink.ddl-generation" value="create-or-extend-tables"/>
我現在嘗試設置:
<property name="eclipselink.ddl-generation" value="none"/>
這樣liquibase可以處理所有數據庫資料。
但是現在,當我運行代碼時,JPA會引發錯誤,因為缺少一些表,盡管這些表應該由liquibase創建,這使我相信JPA在liquibase之前運行。
如何更改該順序? 到目前為止,通過以下行在代碼中執行Liquibase:
java.sql.Connection connection = openConnection(); //your openConnection logic here
Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
Liquibase liquibase = new liquibase.Liquibase("path/to/changelog.xml", new ClassLoaderResourceAccessor(), database);
liquibase.update(new Contexts(), new LabelExpression());
我在某處讀到可以通過Liquibase Servlet偵聽器來實現,但這需要數據庫數據源,而且我不知道該如何獲取。
Liquibase本身工作正常。
如果要將Liquibase作為應用程序的一部分運行,我建議使用“自動”部分中記錄的選項之一:
http://www.liquibase.org/documentation/running.html
如果要開發Java EE應用程序,請首先創建一個數據源: https : //docs.oracle.com/javaee/7/tutorial/resource-creation002.htm
請注意,這是特定於應用程序服務器的。
從Java EE 6開始,現在還可以使用與應用程序服務器無關的注釋: http : //docs.oracle.com/javaee/7/api/javax/annotation/sql/DataSourceDefinition.html
在您的persistence.xml中,我建議使用transaction-type="JTA"
並使用以下方式引用數據源:
<jta-data-source>jdbc/someDB</jta-data-source>
省略部分:
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
<property name="javax.persistence.jdbc.url" value=.../>
<property name="javax.persistence.jdbc.user" value=.../>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.