当前位置: 首页 > 知识库问答 >
问题:

使用Liquibase Maven插件从JPA实体生成Changlog

闾丘山
2023-03-14

我想为我的项目添加Liquibase DB迁移支持。它也使用Spring靴。现在,我想通过使用Hibernate和JPA实体类,在没有DB连接的情况下生成changelog。但它抛出了一个错误:

mvn liquibase:generateChangeLog
[...]
Error setting up or running Liquibase: javax.persistence.PersistenceException: Unable to resolve persistence unit root URL: class path resource [] cannot be resolved to URL because it does not exist
[...]

我没有持久单元XML文件,因为这都是由Spring Boot在运行时完成的。该项目是一个多模块项目。Liquibase插件配置在父POM中。实体在子模块中。

这是Liquibase的Maven插件配置:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>${liquibase.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate5</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>
    <configuration>
        <url>hibernate:spring:org.kitodo.mediaserver.core.db.entities?dialect=liquibase.ext.hibernate.database.HibernateGenericDialect&amp;hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&amp;hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy</url>
        <driver>liquibase.ext.hibernate.database.connection.HibernateDriver</driver>
    </configuration>
</plugin>

如果我使用DB连接而不是hibernate:spring:。。。它起作用了。

如何在没有DB连接的情况下通过实体生成变更日志?

共有1个答案

郝峰
2023-03-14

我也遇到了同样的问题,为了解决这个问题,我添加了maven项目的依赖项,该项目包含您的实体。例如:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>${liquibase.version}</version>
    <dependencies>
        <dependency>
            <groupId>org.liquibase.ext</groupId>
            <artifactId>liquibase-hibernate5</artifactId>
            <version>3.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

        <!-- Add your maven project which hosts your entities classes -->
        <dependency>
            <groupId>org.kitodo.mediaserver</groupId>
            <artifactId>org.kitodo.mediaserver.core.db.entities</artifactId>
            <version>1.0.0</version>
        </dependency>

    </dependencies>
    <configuration>
        <url>hibernate:spring:org.kitodo.mediaserver.core.db.entities?dialect=liquibase.ext.hibernate.database.HibernateGenericDialect&amp;hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&amp;hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy</url>
        <driver>liquibase.ext.hibernate.database.connection.HibernateDriver</driver>
    </configuration>
</plugin>
 类似资料:
  • 我想把liquibase介绍到我的项目中,首先,我想根据我的hibernate实体生成一个changelog文件。 感谢你的帮助.

  • 有没有一种方法可以使用IntelliJ生成JPA实体,而不需要持久性。xml文件?或者IntelliJ基本上可以从Java配置中识别持久性单元?我有一个现有(遗留)模式,该项目是一个重写,现在在Spring Boot中使用Java配置。根据Spring Boot文档,持久化单元将通过以下代码创建:

  • 主要内容:JPA实体插入示例在JPA中,我们可以通过实体轻松地将数据插入到数据库中。 提供方法来插入数据记录。 JPA实体插入示例 在这里,我们将演示如何使用实现插入学生的记录。 创建一个JPA项目,其项目目录结构如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为StudentEntity.java的实体类,这个类包含以下几个属性:, 和 。 文件:StudentEntity.java 的代码如下 - 第2

  • 我从一个由DBA制作的现有表中生成了实体类。表中的列不是按字母顺序排列的。当我启动应用程序时,出现以下错误消息 --错误消息-- 执行DDL表名时出错 数据库中已有一个名为table name的对象 --应用程序.属性-- spring.jpa.hibernate.ddl-auto=none spring.jpa.generate-ddl=false 是否可以从现有的表中创建实体类,其中的列不是按

  • 我在配置以从WSDL和多个XSD文件生成Java类时遇到问题,这些文件都存在于同一个标准目录。 如何将jaxb2 maven插件与内联XSD一起使用?只因为答案正确地建议在插件配置中使用参数,但这个问题实际上与内联XSD有关,而我的XSD是外部的。 这里列出了插件目标参数。 我的插件配置是: 我正在用

  • 问题内容: 我有maven项目,我想从现有实体生成DDL。 我怎样才能做到这一点? 我可以生成DDL的任何Maven插件吗? 我正在使用JPA。(open jpa) 问题答案: openjpa-maven-plugin插件提供了一个目标。使用此目标,可以从现有实体创建DDL。