更新了 rieckpil 建议
你好,
现在我面临一个只有在我使用 CrudRepository 从 H2 DB 添加/读取实体时才会出现的问题。
一个非常基本的例子,它有效:
我的属性:
spring.datasource.url=jdbc:h2:file:~/flyawayTest;DB_CLOSE_ON_EXIT=FALSE;AUTO_RECONNECT=TRUE
spring.datasource.username=admin
spring.datasource.password=password
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.flyway.baseline-on-migrate = true
和一个示例类
@Entity
@Data
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
public User() {
}
public User(String username) {
this.username = username;
}
public User(String username, long lastLogin) {
this.username = username;
//this.lastLogin = lastLogin;
}
}
使用这个.sql 文件
CREATE TABLE USER (
ID bigint(20) NOT NULL AUTO_INCREMENT,
USERNAME varchar(100) NOT NULL,
PRIMARY KEY (ID)
);
insert into USER (USERNAME) values ('User');
ALTER TABLE USER ADD COLUMN LASTLOGIN bigint(20) default 0
V1__baseline.sql(为空,因为它仅用于获取包含用户 TestUser 的数据库的基线
V2__migrate.sql
ALTER TABLE USER ADD COLUMN LASTLOGIN bigint(20) default 0
我的步骤是:
将新用户添加userRepo.save(new User("A"));
到我的空数据库
关机申请
将 flywaydb 依赖添加到我的 pom
创建一个空的 .sql 文件以V1__baseline.sql
使用spring.flyway.baseline-on-migrate = true
并启动应用程序,成功,关闭
创建一个V2__migrate.sql
以内容命名的新 sql 文件ALTER TABLE USER ADD COLUMN LASTLOGIN bigint(20) default 0
然后我将该字段添加private long lastLogin;
到类中User
。
当我现在再次启动应用程序时,我收到了上面提到的错误
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing column [last_login] in table [user]
那么我在这里做错了什么?
饮歌长啸
相关分类