gpt4 book ai didi

java - Liquibase + JPA : Run order

转载 作者:行者123 更新时间:2023-12-01 09:29:24 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com