我有一个spring boot 2项目(jhipster),我对休眠表如何与liquibase一起工作感到困惑。
现在,我有一堆带有休眠注释的数据类,并且我想插入一些静态数据以进行测试。在开始时,我有很多问题。
当我已经具有休眠注释的数据类时,是否必须定义liquibase changeSets
来创建表?
在配置数据库时如何运行liquibase changeSets
?
编辑-----
在变更集和domain(java)代码之间如何命名外键关系?例如,我有一个Person
表,它包含对Address
表的引用。如何在changeSet表中表示这种关系?
Person
表不包含Address
的ID,它包含引用。
答案 0 :(得分:1)
Spring Boot与liquibase集成良好。
如果您希望 liquibase处理表的创建(DDL)并且不休眠:
您需要禁用休眠自动创建标志。
设置spring.jpa.hibernate.ddl-auto=none
(或)从application.yml文件中删除此属性。
只需在pom.xml中添加以下内容:
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
下面是创建表并将数据插入表的示例代码。
文件位置: src / main / resources / db / changelog / db.changelog-master.yaml
databaseChangeLog:
- changeSet:
id: 1
author: sgollapinni
changes:
- createTable:
tableName: person
columns:
- column:
name: id
type: int
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: first_name
type: varchar(255)
constraints:
nullable: false
- column:
name: last_name
type: varchar(255)
constraints:
nullable: false
- createTable:
tableName: address
columns:
- column:
name: id
type: int
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: city
type: varchar(255)
constraints:
nullable: false
- column:
name: person_id
type: varchar(255)
constraints:
nullable: false
foreignKeyName: fk_person_address
references: person(id)
- changeSet:
id: 2
author: sgollapinni
changes:
- insert:
tableName: person
columns:
- column:
name: first_name
value: Sunil
- column:
name: last_name
value: Kumar
- insert:
tableName: address
columns:
- column:
name: city
value: Bangalore
- column:
name: user_id
value: (Select id from person where name = 'Sunil')
否则,如果您希望休眠以处理DDL,而只想插入一些静态数据以进行测试,则您仍然可以使用liquibase进行操作。
您可以使用 changeSets 添加DML语句。
- changeSet:
id: 1
author: sgollapinni
changes:
- insert:
tableName: person
columns:
- column:
name: first_name
value: Sunil
- column:
name: last_name
value: Kumar
- insert:
tableName: address
columns:
- column:
name: city
value: Bangalore
- column:
name: user_id
value: (Select id from person where name = 'Sunil')
希望有帮助!