在 Hibernate 中保留枚举值:排除错误的列类型
在数据持久化领域,确保数据模型、数据库模式之间的兼容性,并且它们各自的映射是必不可少的。在 Java 中使用枚举类型时,确定 Hibernate 如何将这些枚举映射到底层数据库至关重要。
在您的例子中,您已将 MySQL 列定义为枚举并在 Java 中创建了相应的枚举代码。但是,您遇到以下错误:“MyApp.Person 中性别列的列类型错误。发现:枚举,预期:整数。”当 Hibernate 期望 Gender 列为整数时,由于枚举被视为序数或字符串(具体取决于 @Enumerated 注解的规范),就会出现此错误。
要解决此问题,您可以显式指定使用 columnDefinition 属性来定义列的定义:
<code class="java">@Column(columnDefinition = "enum('MALE','FEMALE')") @Enumerated(EnumType.STRING) private Gender gender;</code>
通过提供列定义,您可以指示 Hibernate 不要猜测列类型,而是遵循指定的定义。
或者,如果您如果不使用 Hibernate 生成模式,您可以通过将列定义值设置为任意值来消除对列定义值的需求:
<code class="java">@Column(columnDefinition = "enum('DUMMY')") @Enumerated(EnumType.STRING) private ManyValuedEnum manyValuedEnum;</code>
通过这种方式,您可以确保枚举值保留在 Java 中枚举,同时相应地同步您的 Liquibase 或 SQL 脚本。
以上是如何确保 Hibernate 在映射到 MySQL 枚举列时保留枚举值?的详细内容。更多信息请关注PHP中文网其他相关文章!