无法在 H2 中使用自定义枚举创建表

问题描述 投票:0回答:1

我们有一个实体,我们称之为测试。

@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 数据库中处理枚举?

spring-boot jpa h2 jpa-2.0
1个回答
0
投票

您是否尝试过在

@Enumeration(EnumType.STRING)
字段上使用
blah
注释?不需要
columnDefinition
或其他东西......

© www.soinside.com 2019 - 2024. All rights reserved.