Hibernate @Enumerated 似乎被忽略了

Hibernate @Enumerated seems to be ignored

我将 class Person 映射为带有枚举 Sex 的注释,如果是男性或女性则表示性别。让我们看看:

@Entity
@Table(name = "PERSON")
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @Enumerated(EnumType.STRING)
    @Column(name = "SEX")
    private Sex sex;

    private enum Sex {
        M,
        F;
    } 

    // Getters, setters & constructors
}

当我测试从 MySQL 数据库中获取所有行时,它可以工作并且映射是正确的。

数据库已经预定义,这里是列的定义:

`SEX` enum('M','F') NOT NULL

但是当我使用 hibernate.hbm2ddl.auto=validate 配置 Hibernate 时出现错误:

found [enum (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)]

当我使用 EnumType.ORDINAL 或根本不使用 @Enumerated 时,错误有点不同 (expecting [integer (Types#INTEGER)])。

我做错了什么?

尝试添加列定义

@Enumerated(EnumType.STRING)
@Column(name = "SEX" , columnDefinition="ENUM('M','S')" ,nullable = false )
private Sex sex;

hibernate validate 做检查类型,长度....因为你在 db 级验证器中有这个,验证器认为它是不同的类型。

我没有在 Oracle 中看到它,但在 MySql 中可能是