在hibernate状态下,是否可以定义一个类到一组枚举的映射?
我已经找到了有关如何定义集合映射的示例,也已经找到了有关如何映射枚举的单独示例,但是我无法弄清楚如何为一个类定义枚举。
有人可以给我提供一个例子吗?
它是基于现有应用程序构建的,因此无法更改数据库架构。
这就是我要建模的关系。Wicket是普通类,而WicketType是Java枚举。
+----------------+ +------------+ +------------+ | 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<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),让我知道是否需要更多信息。