我们有一个实体,我们称之为测试。
@Entity
@Table(name = "TEST", schema = "KAA")
public class Test implements Serializable {
@Id
@Column(name = "ID", columnDefinition = "uuid", unique = true)
private UUID id;
@Column(name = "name", columnDefinition = "name")
private String name;
@Column(name = "blah", columnDefinition = "enum??")
private Blah blah = Blah.A;
//..etc
}
Blah 类型是一个枚举,如下所示:
public enum Blah {
A("A"),
B("B");
private final String name;
private Blah(String s) {
name = s;
}
public String toString() {
return this.name;
}
}
如何将枚举类型持久化到H2数据库中? H2 数据库无法初始化具有此枚举类型的表。
在我的 Spring Boot 配置中,我有这个:
spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS KAA
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
显然你可以覆盖配置中的 INIT。
INIT=如果不存在则创建域枚举为 VARCHAR(255);
由于我的配置中已经有一个 INIT,因此附加此 INIT 似乎不起作用。
如果我像这样附加
spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS KAA;INIT=CREATE DOMAIN IF NOT EXISTS enum as VARCHAR(255)
它说 INIT 被加倍了。
如果我用逗号分隔它:
spring.datasource.url=jdbc:h2:mem:testdb;INIT=CREATE SCHEMA IF NOT EXISTS KAA,INIT=CREATE DOMAIN IF NOT EXISTS enum as VARCHAR(255)
它说有语法错误。
有谁知道如何正确编写 INIT,更一般地说,如何在 H2 数据库中处理枚举?
您是否尝试过在
@Enumeration(EnumType.STRING)
字段上使用 blah
注释?不需要columnDefinition
或其他东西......