Hibernate @Enumerated似乎被忽略了

时间:2017-07-01 19:31:31

标签: java mysql hibernate enums hibernate-5.x

如果是男性或女性,我的课程Person与注释一起使用enum 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)]

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

我做错了什么?

1 个答案:

答案 0 :(得分:4)

尝试添加columnDefinition

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

hibernate验证do检查类型,lenght ....因为你在db level中有这个,验证器认为它的类型不同。

我没有在Oracle上看到它,但是使用MySql可能是