java - 使用 hibernate 注释将枚举映射到表

标签 java hibernate enums orm

我有一个表 DEAL 和一个表 DEAL_TYPE。我想映射这段代码:

public class Deal {
   DealType type;
}

public enum DealType {
   BASE("Base"), EXTRA("Extra");
}

问题是数据已经存在于数据库中。而且我很难将类映射到数据库。

数据库看起来像这样:

   TABLE DEAL {
      Long id;
      Long typeId;
   }

   TABLE DEAL_TYPE {
       Long id;
       String text;
   }

我知道我可以在交易类型之间使用简单的@OneToMany 关系,但我更喜欢使用枚举。这可能吗?

我几乎可以通过使用 EnumType.ORDINAL 类型来实现它。但不幸的是,我的交易类型表中的 ID 不是连续的,并且不是从 1 开始的。

有什么建议吗?

最佳答案

Hibernate 在 Enums 中有点糟糕。这是一个非常好的 ORM 的奇怪失败。解决它的“最简单”的方法是将您的 Enum 声明为自定义 hibernate 类型。幸运的是,Hibernate 编写了一个示例实现,您可以将它逐字写入您的应用程序中:

http://www.hibernate.org/265.html

它们甚至包括如何使用它的说明。这是我在最终需要持久化枚举时使用的模式。

关于java - 使用 hibernate 注释将枚举映射到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735732/

相关文章:

Java 8 Boolean.logicalOr 方法

java - 尝试将实例变量初始化为具有直径和颜色的形状实例

java - JPA注释映射与hibernate,以及最佳关系模型

具有相同名称的 Java 枚举和字段

java - 使用ajax创建自动建议文本框

java - hadoop map reduce线程中整个reducer步骤是否安全?

java - 如何在 Spring JPA Web 应用程序中设置一些 Hibernate 属性?

java - Hibernate : Class not found error (java. lang.NoClassDefFoundError),尽管在 Maven 中添加了依赖项

java - 枚举 valueOf() 的线程安全

c# - 用户选择枚举范围之外的值时出现问题