我有一个简单、典型的spring-boot应用程序,它使用PostgreSQL数据库。
这是我的
项目.java
实体:
@Entity
@Getter
@Setter
public class Item {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
public UUID id;
private String name;
private LocalDate added;
private boolean available;
}
以下是我的liquibase脚本(在单独的*.sql文件中):
--liquibase formatted sql
--changeset author:001
CREATE TABLE IF NOT EXISTS item (
id UUID NOT NULL CONSTRAINT PK_item PRIMARY KEY DEFAULT uuid_generate_v4(),
name VARCHAR UNIQUE NOT NULL,
added DATE DEFAULT NOW() NOT NULL,
available BOOLEAN DEFAULT TRUE NOT NULL
);
--liquibase formatted sql
--changeset author:002
INSERT INTO item (name, available) VALUES ('item1', TRUE);
INSERT INTO item (name, available) VALUES ('item2', TRUE);
INSERT INTO item (name, available) VALUES ('item3', FALSE);
INSERT INTO item (name, available) VALUES ('item4', TRUE);
INSERT INTO item (name, available) VALUES ('item5', TRUE);
INSERT INTO item (name, available) VALUES ('item6', TRUE);
INSERT INTO item (name, available) VALUES ('item7', FALSE );
INSERT INTO item (name, available) VALUES ('item8', FALSE );
INSERT INTO item (name, available) VALUES ('item9', FALSE );
INSERT INTO item (name, available) VALUES ('item10', TRUE);
还有我的
application.yml
文件
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: validate
liquibase:
change-log: liquibase/master.xml
enabled: true
好的,现在让我们考虑一下,我想手动更改或添加任何列到我的数据库结构中。
我正在添加字段
“描述”
到我的
项目.java
实体:
private String description;
并将同一列直接添加到数据库中(
而不制作新的liquibase变更集
):
ALTER TABLE item ADD description VARCHAR(255);
现在,我正在运行我的应用程序,预计会出现以下错误:
Validation Failed:
1 change sets check sum
com/example/changelog.xml::1::example was: 8:63f82d4ff1b9dfa113739b7f362bd37d but is now: 8:b4fd16a20425fe377b00d81df722d604
但是。。什么也没发生。。。我的应用程序运行非常正常:
2023-06-18T11:44:32.214+02:00 INFO 9832 --- [ restartedMain] liquibase.database : Set default schema name to public
2023-06-18T11:44:32.257+02:00 INFO 9832 --- [ restartedMain] liquibase.lockservice : Successfully acquired change log lock
2023-06-18T11:44:32.405+02:00 INFO 9832 --- [ restartedMain] liquibase.changelog : Reading from public.databasechangelog
2023-06-18T11:44:32.439+02:00 INFO 9832 --- [ restartedMain] liquibase.lockservice : Successfully released change log lock
2023-06-18T11:44:32.479+02:00 INFO 9832 --- [ restartedMain] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2023-06-18T11:44:32.507+02:00 INFO 9832 --- [ restartedMain] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.1.7.Final
2023-06-18T11:44:32.632+02:00 INFO 9832 --- [ restartedMain] SQL dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQLDialect
2023-06-18T11:44:32.741+02:00 INFO 9832 --- [ restartedMain] o.h.c.beanvalidation.TypeSafeActivator : Error calling `jakarta.validation.Validation#buildDefaultValidatorFactory`
我需要修复它并防止任何
手动更改
在我的数据库结构中。仅通过添加新的其他变更集。如何实施?非常感谢。