我有一个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) 我使用 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 应自动包含我的列的重命名...标记,而不是添加.. 和删除.. 一个..
我想知道是否可以将现有的 SQL 脚本转换为 liquibase 更改日志的 XML 格式?
我使用 生成了 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) 如此处所述(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) 我有一组 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) 我一直在尝试使用liquibase来管理 Spring JPA 项目上的迁移,就像 Python/Django 使用makemigrations
. Liquibase文档非常混乱,我尝试遵循我在网上找到的一些 SA 答案和教程,但无济于事。
这是我想要做的:
到目前为止,我能够生成一个“差异”更改日志文件,并以某种方式设法让 liquibase在空数据库上创建databasechangelog
和databasechangeloglock
表。但是,我无法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) 我即将迁移到 Hibernate ORM 5.0,我也想在我的项目中使用 Liquibase。
该Liquibase Hibernate的扩展提到liquibase-hibernate4
对Hibernate 4.3+支持。
有没有人使用 Liquibase 和 Hibernate ORM 5.0?
我想确保新的 Hibernate 版本在 Liquibase 中没有问题。
我按照这些步骤让 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 在给定的包中找不到我的实体类(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
liquibase ×9
hibernate ×5
java ×4
jpa ×2
spring-boot ×2
postgresql ×1
spring ×1
spring-data ×1
sql ×1