告诉 Hibernate 的 hbm2ddl 为 @Enumerated 注解字段添加 MySQL 枚举列

Sim*_*mon 5 mysql enums hibernate hbm2ddl

我正在使用 hbm2ddl 和类似于以下的 Java 代码创建数据库表:

@Entity
public  class Filter {
    public enum Type {
        TypeA, TypeB;
    }
    @Enumerated(EnumType.STRING)
    private Type type;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但对于“type”,会创建一个 VARCHAR 列,即 DDL 代码如下所示:

CREATE TABLE IF NOT EXISTS `filter` (`type` varchar(255) DEFAULT NULL)
Run Code Online (Sandbox Code Playgroud)

但我想要的是这样的:

CREATE TABLE IF NOT EXISTS `filter` (`type` enum('TypeA','TypeB') NOT NULL)
Run Code Online (Sandbox Code Playgroud)

这是否可以在 Hibernate 中声明,最好使用注释?

或者有没有办法扩展 SchemaUpdate 并覆盖以我喜欢的方式呈现枚举字段的更改脚本部分的方法?

背景:项目的 PHP 部分使用相同的数据库,我想防止插入无效值。

Luc*_*ira 1

我相信这会很复杂,因为定义 java 处理的 sql 类型的 java.sql.Types 没有枚举类型(因为它不是根据 SQL-92 的标准化类型)。

如果这种情况,您可以创建一个 hibernate 自定义 UserType 来扩展 EnumType 并相应地设置 sqlType,但由于 java.sql.Types 不处理它,我不知道如何使用本机 sql 枚举。

此致!