标签: liquibase-hibernate

Liquibase从JPA实体生成更改日志

我有一个Spring引导,spring数据jpa项目,父项和三个子模块.我的一个模块负责我的JPA实体.我需要从这个实体生成一个带有liquibase的xml更改日志.

在我的liquibase.properties中我有代码:

changeLogFile=src/main/resources/db/changelog/db.changelog-master.xml
url=jdbc:mysql://localhost:3306/test
username=root
password=root
driver=com.mysql.jdbc.Driver
outputChangeLogFile=src/main/resources/db/outputChangeLog/liquibase-outputChangeLog.xml
referenceUrl=hibernate:spring:br.com.company.vacation.domain?dialect=org.hibernate.dialect.MySQLDialect
diffChangeLogFile=src/main/resources/liquibase-diff-changeLog.xml
Run Code Online (Sandbox Code Playgroud)

所以,如果我尝试执行命令:liquibase:diff我收到错误:

在我的pom.xml中,我配置liquibase就像这样:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
    <configuration>
        <propertyFile>src/main/resources/liquibase.properties</propertyFile>
    </configuration>
        <dependencies>
            <dependency>
                <groupId>org.liquibase.ext</groupId>
                <artifactId>liquibase-hibernate4</artifactId>
                <version>3.5</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>4.1.7.RELEASE</version>
            </dependency>
        </dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)

如果我执行liquibase:generateChangeLog liquibase从我现有的数据库生成日志...但是如果我尝试执行liquibase:diff我收到错误:

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff (default-cli) on project vacation-club-web: Execution default-cli of goal org.liquibase:liquibase-maven-plugin:3.4.1:diff failed: A required class was missing while executing org.liquibase:liquibase-maven-plugin:3.4.1:diff: org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.liquibase:liquibase-maven-plugin:3.4.1
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy
[ERROR] urls[0] = file:/C:/Users/lucas.araujo/.m2/repository/org/liquibase/liquibase-maven-plugin/3.4.1/liquibase-maven-plugin-3.4.1.jar
[ERROR] urls[1] …
Run Code Online (Sandbox Code Playgroud)

liquibase spring-data spring-boot liquibase-hibernate

8
推荐指数
1
解决办法
1万
查看次数

Liquibase + Hibernate 重命名列

我使用 H2 数据库来存储我的数据,并使用 liquibase (带有 hibernate 插件)来检查数据库和 projet 之间的差异。

假设我有以下代码:

@Entity
public class myEntity{

    @Column(name="val")
    private int value;

}
Run Code Online (Sandbox Code Playgroud)

数据库已就位并已存储一些数据。

现在,当我将上面的列 ie 从 val 重命名为 value 并运行 liquibase:diff 时,difflog 会显示删除列“val”并添加列“value”。

显然这不是我想要的,因为原来存储在“val”列中的所有数据都会消失。

有没有办法告诉 liquibase 它不是一个新列,而是一个旧的重命名列?

我想运行 liquibase:diff 并且生成的 diffLog 应自动包含我的列的重命名...标记,而不是添加.. 和删除.. 一个..

java hibernate jpa liquibase liquibase-hibernate

7
推荐指数
1
解决办法
2万
查看次数

有没有办法将 SQL 查询转换为 liquibase 更改日志格式?

我想知道是否可以将现有的 SQL 脚本转换为 liquibase 更改日志的 XML 格式?

java sql liquibase spring-data-jpa liquibase-hibernate

7
推荐指数
1
解决办法
8692
查看次数

liquibase:diff 命令抛出空指针异常

我使用 生成了 liquibase 架构mvn liquibase:generateChangeLog,当我尝试使用 执行 diff 命令时,mvn liquibase:diff收到错误消息 Error getting default schema java.lang.NullPointerException。不确定我的配置有什么问题。我正在使用 Spring Boot 和 Spring JPA 测试 Liquibase 3.6

错误信息

 mvn liquibase:diff
[INFO] Scanning for projects...
[INFO] 
[INFO] -------------------------< com:liquibasetest >--------------------------
[INFO] Building liquibasetest 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- liquibase-maven-plugin:3.6.3:diff (default-cli) @ liquibasetest ---
[INFO] ------------------------------------------------------------------------
[INFO] Parsing Liquibase Properties File
[INFO]   File: src/main/resources/liquibase.properties
[INFO]   'outputChangeLogFile' in properties file is not being used by this task.
[INFO] ------------------------------------------------------------------------
[INFO] …
Run Code Online (Sandbox Code Playgroud)

liquibase liquibase-hibernate

7
推荐指数
1
解决办法
7328
查看次数

Liquibase Hibernate插件不起作用

如此处所述(https://github.com/liquibase/liquibase-hibernate/issues/74)我遇到了使liquibase-hibernate扩展正常工作的问题.我想我已经完成了所有设置,但似乎我一直遇到奇怪的问题.我觉得我错过了一些简单的东西,但我想我已按照提供的所有说明进行操作.

我正在使用liquibase 3.3.2,Hibernate 4.3.0.Final,java 1.7.0_71和liquibase-hibernate4-3.5.jar.我的CLASSPATH环境变量是空的,但liquibase shell脚本会添加一些东西.当我使用正常的liquibase命令进行交互时,我从$ LIQUIBASE_HOME/lib /目录中删除了没有扩展名的扩展名,它可以正常工作.我用DEBUG输出重新启动命令以提供更多信息.

$ echo $CLASSPATH


$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)

$ liquibase --version
Liquibase Version: 3.3.2

$ liquibase diffChangeLog
//The below is the stuff liquibase is adding to my classpath
.:/c/repos/ServeDirtyLibsInJava/liquibaseLib/liquibase.jar:/c/repos/ServeDirtyLibsInJava/liquibaseLib/lib/liquibase-hibernate4-3.5.jar:/c/repos/ServeDirtyLibsInJava/liquibaseLib/lib/snakeyaml-1.13.jar
WARNING 1/19/15 12:42 AM: liquibase: Can not use class liquibase.ext.hibernate.database.HibernateEjb3Database as a Liquibase service because org.hibernate.dialect.Dialect is not in the classpath
WARNING 1/19/15 12:42 AM: …
Run Code Online (Sandbox Code Playgroud)

java hibernate liquibase liquibase-hibernate

6
推荐指数
2
解决办法
6201
查看次数

Liquibase 生成空的 ALTER SEQUENCE 更改

我有一组 JPA 实体,它们的 ID 由序列生成:

@GenericGenerator(
    name = "catalog_items_history_seq",
    strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
    parameters = [
        (Parameter(name = "sequence_name", value = "catalog_item_history_sequence")),
        (Parameter(name = "initial_value", value = "1")),
        (Parameter(name = "increment_size", value = "1"))
    ]
)

class CatalogItemHistory {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "catalog_items_history_seq")
    var id: Long = -1
}
Run Code Online (Sandbox Code Playgroud)

当我diffChangeLog第一次运行gradle 任务时,我得到了正确的 CREATE SEQUENCE 语句并且序列创建正常。

但是,如果我再次运行该任务,我的更改日志将包含如下更改:

<changeSet author="raibaz (generated)" id="1582110272824-1">
    <alterSequence sequenceName="catalog_item_history_sequence"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

这会导致语法错误,因为它们生成的 SQLALTER SEQUENCE catalog_item_history_sequence是无效的,因为它实际上并没有改变任何东西。

当我运行 liquibase 来更新我的数据库架构时,我得到的是:

Caused by: liquibase.exception.DatabaseException: ERROR: syntax …
Run Code Online (Sandbox Code Playgroud)

postgresql liquibase liquibase-hibernate

6
推荐指数
1
解决办法
807
查看次数

如何使用带有 Spring-Boot JPA 和 Maven 的 Liquibase 来管理来自 JPA 实体的迁移

我一直在尝试使用liquibase来管理 Spring JPA 项目上的迁移,就像 Python/Django 使用makemigrations. Liquibase文档非常混乱,我尝试遵循我在网上找到的一些 SA 答案和教程,但无济于事。

这是我想要做的:

  1. 通过 JPA 注释类定义实体。
  2. 生成迁移以反映 MySQL 数据库上的这些实体。
  3. 在数据库上应用所述迁移。(最初为空)

到目前为止,我能够生成一个“差异”更改日志文件,并以某种方式设法让 liquibase在空数据库上创建databasechangelogdatabasechangeloglock表。但是,我无法master.xml使用差异更新文件或将差异应用于数据库。

到目前为止,这是我的配置(基本的 spring-jpa 项目,只有一个用于测试的实体):

Pom.xml(缩写)

<project>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.3</version>
        <relativePath/>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>my-group</groupId>
    <artifactId>web</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-core</artifactId>
            <version>4.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins> …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa spring-boot liquibase-hibernate

6
推荐指数
0
解决办法
772
查看次数

Liquibase + Hibernate ORM 5.0

我即将迁移到 Hibernate ORM 5.0,我也想在我的项目中使用 Liquibase。

Liquibase Hibernate的扩展提到liquibase-hibernate4对Hibernate 4.3+支持。

有没有人使用 Liquibase 和 Hibernate ORM 5.0?

我想确保新的 Hibernate 版本在 Liquibase 中没有问题。

hibernate liquibase hibernate-5.x liquibase-hibernate

5
推荐指数
1
解决办法
1912
查看次数

liquibase-hibernate 将所有表显示为“意外”

我按照这些步骤让 liquibase-hibernate 工作。我希望我正确理解了wiki 中的说明。

我们的休眠实体在文件中声明applicationContext.xml。我们没有hibernate.cfg.xml. 我的 liquibase 属性是:

url=jdbc:postgresql://localhost:1234/MY_DATABASE
username=user
password=pass
referenceUrl=hibernate:spring:somePackage?dialect=org.hibernate.dialect.PostgreSQLDialect
Run Code Online (Sandbox Code Playgroud)

无论我输入什么somePackage,liquibase都会将所有内容(表、列、约束)显示为“意外”。somePackage即使Liquibase不存在,它也会“找到” 。

liquibase diff
INFO 09.08.17 10:41: liquibase-hibernate: Reading hibernate configuration hibernate:spring:somePackage?dialect=org.hibernate.dialect.PostgreSQLDialect
INFO 09.08.17 10:41: liquibase-hibernate: Found package somePackage
Run Code Online (Sandbox Code Playgroud)

比较结果就像

Reference Database: null @ hibernate:spring:somePackage?dialect=org.hibernate.dialect.PostgreSQLDialect (Default Schema: HIBERNATE)
Comparison Database: postgres @ jdbc:postgresql://localhost:1234/MY_DATABASE (Default Schema: public)
Compared Schemas: HIBERNATE -> public
Product Name:
     Reference:   'Hibernate'
     Target: 'PostgreSQL'
Product Version:
     Reference:   '4.3.11.Final'
     Target: '9.5.4'
Missing …
Run Code Online (Sandbox Code Playgroud)

liquibase liquibase-hibernate

5
推荐指数
0
解决办法
284
查看次数

Liquibase 在 spring 项目中找不到我的实体类来生成差异

Liquibase 在给定的包中找不到我的实体类(JPA 注释)来生成差异。

当我使用mvn liquibase:diff命令时它说 没有发现任何变化,无事可做,但我的实体有新字段

我使用 spring 框架、JPA(hibernate)、Liquibase、liquibase-hibernate

这是我的代码:

liquibase.properties

referenceUrl=hibernate:spring:model.entity.persistent?dialect=org.hibernate.dialect.OracleDialect
changeLogFile=src/main/resources/liquibase-changeLog.xml
url=jdbc:oracle:thin:@localhost:1521:xe
username=username
password=password
driver=oracle.jdbc.OracleDriver
diffChangeLogFile=src/main/resources/liquibase-diff-changeLog-8.xml
Run Code Online (Sandbox Code Playgroud)

pom.xml liquibase-hibernate 配置

<plugin>
            <groupId>org.liquibase</groupId>
            <artifactId>liquibase-maven-plugin</artifactId>
            <version>3.5.3</version>
            <configuration>
                <propertyFile>src/main/resources/liquibase.properties</propertyFile>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>update</goal>
                    </goals>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.liquibase.ext</groupId>
                    <artifactId>liquibase-hibernate4</artifactId>
                    <version>3.5</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                    <version>4.1.7.RELEASE</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.data</groupId>
                    <artifactId>spring-data-jpa</artifactId>
                    <version>1.7.3.RELEASE</version>
                </dependency>


                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-jdbc</artifactId>
                    <version>2.0.6</version>
                </dependency>

                <dependency>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                    <version>1.19</version>
                </dependency>

            </dependencies>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

spring hibernate database-migration liquibase liquibase-hibernate

5
推荐指数
1
解决办法
2981
查看次数