一尘不染

将枚举映射到带有休眠注释的表

hibernate

我有一张桌子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开始。

有什么建议么?


阅读 205

收藏
2020-06-20

共1个答案

一尘不染

hibernate对Enums来说很可怕。如果不是一个很好的ORM,这是一个奇怪的失败。解决它的“最简单”方法是将枚举声明为自定义hibernate类型。幸运的是,Hibernate编写了一个示例实现,您可以逐字逐字地将其放入应用程序中:

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

他们甚至包括有关如何使用它的说明。每当我遇到需要持久枚举的情况时,我都会使用这种模式。

2020-06-20