hibernate 在实体中枚举创建表时创建“检查”约束

eblbsuwk  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(161)

随着springboot 3.1的新版本,我注意到当我创建一个带有枚举字段的实体时,数据库包含该字段的对应检查,以前不是这样的。我想知道是否有一种方法可以避免这种情况,我正在使用PostgreSQL。
这里是我的实体类:

public class LogFile  {

@Column(nullable = false)
@Enumerated(EnumType.STRING)
private Status status;

private String fileName;

}

下面是我的Status枚举:

public enum Status {

ACTIVE("ACTIVE"),
PASSIVE("PASSIVE");

private String value;

Status(String value) {
    this.value = value;
}

public String getValue() {
    return value;
}
}

当创建表时,这是我看到的SQL代码:
create table log_file(status varchar(255)not null check(status in('ACTIVE ','PASSIVE')),file_name varchar(255))

erhoui1w

erhoui1w1#

枚举转换器(NamedEnumValueConverter)是硬编码的,但它调用Dialect来实现检查。所以,解决方案是扩展你的方言。getCheckCondition由枚举转换器调用以生成值检查规则。

package com.mycompany;

import org.hibernate.dialect.PostgreSQLDialect;

public class MyPostgresDialect extends PostgreSQLDialect {
    @Override
    public String getCheckCondition(String columnName, String[] values) {
        // We do not want enum database checks
        return null;
    }
}

然后在配置中的某个地方你必须指定

hibernate.dialect=com.mycompany.MyPostgresDialect

相关问题