对于最新的稳定版本,请使用 Spring Data Relational 3.3.1! |
对于最新的稳定版本,请使用 Spring Data Relational 3.3.1! |
使用 SQL 数据库时,架构是必不可少的部分。 Spring Data JDBC 支持广泛的架构选项,但是在从域模型开始时,提出初始域模型可能具有挑战性。 为了帮助您采用代码优先的方法,Spring Data JDBC 附带了一个集成,用于使用 Liquibase 创建数据库更改集。
请考虑以下域实体:
@Table
class Person {
@Id long id;
String firstName;
String lastName;
LocalDate birthday;
boolean active;
}
通过以下代码呈现初始 ChangeSet:
RelationalMappingContext context = … // The context contains the Person entity, ideally initialized through initialEntitySet
LiquibaseChangeSetWriter writer = new LiquibaseChangeSetWriter(context);
writer.writeChangeSet(new FileSystemResource(new File(…)));
生成以下更改日志:
databaseChangeLog:
- changeSet:
id: '1685969572426'
author: Spring Data Relational
objectQuotingStrategy: LEGACY
changes:
- createTable:
columns:
- column:
autoIncrement: true
constraints:
nullable: false
primaryKey: true
name: id
type: BIGINT
- column:
constraints:
nullable: true
name: first_name
type: VARCHAR(255 BYTE)
- column:
constraints:
nullable: true
name: last_name
type: VARCHAR(255 BYTE)
- column:
constraints:
nullable: true
name: birthday
type: DATE
- column:
constraints:
nullable: false
name: active
type: TINYINT
tableName: person
列类型是从实现策略接口的对象计算得出的。
从类型推断出可空性,如果属性类型使用原始 Java 类型,则设置为 null 性。SqlTypeMapping
false
架构支持可以在整个应用程序开发生命周期中为您提供帮助。
在差分模式下,向架构编写器实例提供现有的 Liquibase,架构编写器将现有表与映射的实体进行比较,并从要创建/删除的表和列的差异中得出。
默认情况下,除非您配置 和 ,否则不会删除任何表和列。
这两个筛选器谓词都提供表名,相应的列名,以便代码可以计算可以删除哪些表和列。Database
dropTableFilter
dropColumnFilter
writer.setDropTableFilter(tableName -> …);
writer.setDropColumnFilter((tableName, columnName) -> …);
架构支持只能识别删除未映射的表/列或添加数据库中不存在的列的添加和删除。 无法重命名列,也无法迁移数据,因为实体映射不提供有关架构演变方式的详细信息。 |
架构支持只能识别删除未映射的表/列或添加数据库中不存在的列的添加和删除。 无法重命名列,也无法迁移数据,因为实体映射不提供有关架构演变方式的详细信息。 |