如果是男性或女性,我的课程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
:
found [enum (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)]
当我使用expecting [integer (Types#INTEGER)]
或根本没有EnumType.ORDINAL
时,错误会有所不同(@Enumerated
)。
我做错了什么?
答案 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可能是