当前位置: 首页 > 面试题库 >

休眠中的枚举,作为枚举持久

夏侯鹏
2023-03-14
问题内容

在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列

我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的Person实体中定义了“性别”。

现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到:

性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数

为什么是这样?就像我用“
@Enumerated(EnumType.ORDINAL)”注释我的“性别”一样,我没有。EnumType似乎只能是ORDINAL或STRING,那么如何指定应将字段视为枚举而不是int?(并没有太大的区别,但是足以让它感到不安。)


问题答案:

我的理解是MySQL枚举类型是非常专有的,并且不受Hibernate支持,请参阅Gavin
King的评论(此相关问题有所不同,但这不是重要的部分)。

所以,我倒认为你必须用你自己的UsereType,我会建议使用 灵活的解决方案-工作版本 从Java
5的EnumUserType
(见AppFuse的Java
5的枚举持久性与Hibernate的例子)。

就我个人而言,我只是忘记了使用MySQL枚举的想法,我不相信“好处”是值得的(有关更多详细信息,请参见此答案)。



 类似资料:
  • 问题内容: 在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列 我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的实体中定义了“性别”。 现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到: 性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数 为什么是这样?这就像我用

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么

  • 问题内容: 背景 Spring 3.x,JPA 2.0,Hibernate 4.x,Postgresql 9.x. 使用我想映射到Postgresql枚举的enum属性在Hibernate映射的类上工作。 问题 用enum列上的where子句查询会引发异常。 代码(大大简化) SQL: Hibernate映射类: 调用查询的Java: Hibernate xml查询: 故障排除 按查询而不是枚举按

  • 问题内容: 我有一个使用枚举的数据库表。这已经可以与hibernate(使用XML)一起使用了,我正尝试将其转换为注释,因为这是仍在使用xml表示法的最后一部分。 列定义: 以下作品: 这不起作用: 注释样式在启动时导致以下异常:org.hibernate.HibernateException:UserDTO中列状态的列类型错误。找到:枚举,预期:varchar(255) 我有什么办法强迫它像使用

  • 问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚