Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate @Enumerated seems to be ignored

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?

like image 462
Nikolas Charalambidis Avatar asked Jul 01 '17 19:07

Nikolas Charalambidis


1 Answers

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

like image 145
xyz Avatar answered Nov 06 '22 06:11

xyz