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 中可能是
我将 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 中可能是