一尘不染

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

hibernate

在hibernate状态下,是否可以定义一个类到一组枚举的映射?

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

有人可以给我提供一个例子吗?

它是基于现有应用程序构建的,因此无法更改数据库架构。

这就是我要建模的关系。Wicket是普通类,而WicketType是Java枚举。

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

再次感谢


阅读 243

收藏
2020-06-20

共1个答案

一尘不染

难道不是你所需要的?

为了详细说明轻率的初始响应,该参考资料提供了一种使用枚举的序号映射枚举的方法。

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

package test;

public class WicketTypeState extends IntEnumUserType<WicketType> {
    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;
    }
}

定义枚举表的映射:

<hibernate-mapping package="test">  
  <class name="Wicket" table="Wicket">
    <id name="id" column="ID"/>
    <set name="wicketTypes" table="WicketType" inverse="true">
      <key column="ID"/>
      <one-to-many class="test.WicketTypeState"/>
    </set>
  </class>
</hibernate-mapping>

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

<hibernate-mapping package="test">
  <class name="WicketTypeState" lazy="true" table="WicketType">
    <id name="WicketType" 
      type="test.WicketTypeState"/>
  </class>
</hibernate-mapping>

这对我的盒子有效(tm),让我知道是否需要更多信息。

2020-06-20