首页 >数据库 >mysql教程 >如何确保 Hibernate 在映射到 MySQL 枚举列时保留枚举值?

如何确保 Hibernate 在映射到 MySQL 枚举列时保留枚举值?

Patricia Arquette
Patricia Arquette原创
2024-11-02 07:58:29598浏览

How to Ensure Hibernate Preserves Enum Values When Mapping to a MySQL Enum Column?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn