在我的 MySQL 数据库中,有“gender enum('male','female')”列
我创建了我的枚举“com.mydomain.myapp.enums.Gender”,并在我的 Person
实体中定义了“Gender 性别”。
现在我想在我的 MySQL 数据库中保留枚举类型,但是当我启动我的应用程序时,我得到:
Wrong column type in MyApp.Person for column Gender. Found: enum, expected: integer
这是为什么?这相当于我用“@Enumerated(EnumType.ORDINAL)”注释了我的“性别性别”,而我没有。 EnumType 似乎只能是 ORDINAL 或 STRING,那么我如何指定它应该将字段视为枚举,而不是 int? (不是说有太大区别,但足以让它对此感到不安。)
最佳答案
如果你给 Hibernate 一个列定义,它不会尝试猜测一个:
@Column(columnDefinition = "enum('MALE','FEMALE')")
@Enumerated(EnumType.STRING)
private Gender gender;
如果您出于任何原因不依赖 Hibernate 生成架构,您甚至不必为 columnDefinition 提供实际值。这样,您可以删除需要保持值同步的实例。只需保持 Java 枚举和 Liquibase 或 SQL 脚本同步即可:
@Column(columnDefinition = "enum('DUMMY')")
@Enumerated(EnumType.STRING)
private ManyValuedEnum manyValuedEnum;
关于java - Hibernate 中的枚举,作为枚举持久存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2160700/