使用liquibase设置spring boot项目

时间:2018-06-20 08:52:19

标签: spring-data-jpa liquibase

我有一个spring boot 2项目(jhipster),我对休眠表如何与liquibase一起工作感到困惑。

现在,我有一堆带有休眠注释的数据类,并且我想插入一些静态数据以进行测试。在开始时,我有很多问题。

当我已经具有休眠注释的数据类时,是否必须定义liquibase changeSets来创建表?

在配置数据库时如何运行liquibase changeSets

编辑----- 在变更集和domain(java)代码之间如何命名外键关系?例如,我有一个Person表,它包含对Address表的引用。如何在changeSet表中表示这种关系?

Person表不包含Address的ID,它包含引用。

1 个答案:

答案 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')

希望有帮助!