【发布时间】:2016-09-19 19:19:34
【问题描述】:
我有一个 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 本身工作正常。
【问题讨论】:
-
这是 Java EE 还是 Spring 应用程序?
-
它是一个 Java EE 项目 :)