问题
I have the class Person
mapped with annotations with enum Sex
reffering to the sex if is male or female. Let's see:
@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
}
When I test getting all the rows from the MySQL database, it works and the mapping is correct.
The database is already predefined, here is the column's definition:
`SEX` enum('M','F') NOT NULL
However the error occurs when I configure Hibernate with hibernate.hbm2ddl.auto=validate
:
found [enum (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)]
The error is a bit different (expecting [integer (Types#INTEGER)]
) happend when I use EnumType.ORDINAL
or no @Enumerated
at all.
What do I do wrong?
回答1:
try add columnDefinition
@Enumerated(EnumType.STRING)
@Column(name = "SEX" , columnDefinition="ENUM('M','S')" ,nullable = false )
private Sex sex;
hibernate validate do check types , lenght.... as you have this in db level validator thinks it's different type .
I didn't see it with Oracle , but with MySql it's might be
来源:https://stackoverflow.com/questions/44864675/hibernate-enumerated-seems-to-be-ignored