java - Liquibase + JPA : Run order

标签 java jpa liquibase

我有一个 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=.../>

关于java - Liquibase + JPA : Run order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39571230/

相关文章:

Java着色字符GUI

java - Spring Security 在登录后总是返回 403 accessDeniedPage

java - JPA 在使用 selectcase 构造查询时处理空值

liquibase - 如果 liquibase 已经存在,如何重新创建索引

java - Liquibase 在检查主键不存在时失败

java - 如何将 Apache Ignite 缓存条目写入 Apache Avro 文件?

java.lang.NullPointerException : Attempt to invoke virtual method 'void androidx.appcompat.app.ActionBar.hide()' on a null object reference

java - 如何坚持涉及@JoinFormula 的逆@OneToOne 映射?

java - JPA:何时选择多值关联与元素集合映射

LiquiBase 验证失败异常。校验和无故更改