簡體   English   中英

Liquibase + JPA:運行訂單

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM