java - Hibernate 中的枚举,作为枚举持久存在

标签 java mysql hibernate orm enums

在我的 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/

相关文章:

java - Numbers 上不需要的自动装箱魔法

java - Hibernate HQL 别名问题

java - HQL 按时间单位(小时/天/月)选择总和和时间组以及

java - 推荐从 Jersey 开始的 Maven 原型(prototype)

java - 我可以更改 session 存储的根目录吗?

java - 使用访问策略向用户配置 Active Directory 帐户时出错

php - 迁移期间 Laravel 未知数据库错误

mysql - 启动 mySQL 时遇到问题

php - 锁定 PHP 以实现关键部分 - MySQL 的意外结果

java - 使用 hibernate 仅节省数据库时间