如何在Hibernate中映射一组枚举类型?

在hibernate中,是否可以将类的映射定义为一组枚举?

我已经能够找到如何定义集合映射的示例,我已经能够找到有关如何映射枚举的单独示例,但我无法弄清楚如何为类定义枚举。

有谁能请我提供一个例子?

这是在现有应用程序之上构建的,因此我无法更改数据库架构。

这是我希望建模的关系。 Wicket是一个普通的类,WicketType是一个Java Enum。

+----------------+ +------------+ +------------+ | Wicket | | Ref Table | | WicketType | +----------------+ +------------+ +------------+ | INT | W_ID | | | | W_TypeId | | .... | | FK | W_ID | FK | WicketType | | INT | TYPE |----| W_TypeId |----| | +----------------+ +------------+ +------------+ 

再次感谢

这不是你需要的吗?

为了详细说明轻率的初始响应,该引用提供了一种使用枚举的序数来映射枚举的方法。

在这种情况下,它实际上比它看起来更简单,因为你在一个集合中托管枚举,你需要为WicketType提供一个IntEnumUserType子类型的访问器,超类型将负责将序数映射到实例。

 package test; public class WicketTypeState extends IntEnumUserType { private WicketType wicketType; public WicketTypeState() { // we must give the values of the enum to the parent. super(WicketType.class, WicketType.values()); } public WicketType getWicketType() { return wicketType; } public void setWicketType(final WicketType wicketType) { this.wicketType = wicketType; } } 

定义枚举表的映射:

          

然后,对于具有枚举集的类型,为该属性定义集映射:

      

这在我的盒子上工作(tm),如果您需要更多信息,请告诉我。

一种更简单的方法

  Wicket 12      ...  

下面的示例代码显示了如何通过注释实现所需的function。

 @Entity @Table (name = "wicket") public class Wicket { ... ... private List wicketTypes = new ArrayList(); @CollectionOfElements(fetch=FetchType.EAGER) @JoinTable( name="wicket_wicket_types", // ref table. joinColumns = {@JoinColumn(name="wicket_id")} ) @Column(name="wicket_type_id") public List getWicketTypes() { return this.wicketTypes; } public void setWicketTypes(List wicketTypes) { this.wicketTypes = wicketTypes; } ... ... } 

WicketType是标准的Java 5 Enum,其枚举声明的顺序和序数与wicket_type表中的顺序和列( wicket_type_id )值wicket_type

 public enum WicketType { WICKET_TYPE1, WICKET_TYPE2 ... }