我需要哪些事前没有实现该接口到现有的数据库,其中存储枚举在同一个表使用所有者类枚举映射@Enumerated(EnumType.STRING)
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
如何映射应该在这种情况下,如何处理? 坚持到数据库中并没有改变,因为所有实现接口的枚举会有不同的值,但我不知道怎么的对象应该从DB(我需要一个自定义的映射检索,这将尝试实例化枚举使用指定的枚举类?是否休眠原生支持此功能?)。
它可以创建一个自定义的UserType
(如这一个 ),并从你的映射,使用它
<property name="type" not-null="true">
<type name="at.molindo.util.hibernate.EnumUserType">
<param name="enumClass">
com.example.MyEnum
</param>
</type>
</property>
编辑:Hibernate内置了它自己的EnumType(因为在Hibernate的注解3.2,因为3.6休眠核心-不知道它在休眠的批注在写作的时候是,但是看到迭戈的回答 )。
Hibernate提供org.hibernate.type.EnumType
映射枚举类型。 例如,
package com.igalia.enumerates;
public enum Status {
BUSY,
AVAILABLE;
}
package com.igalia.entities;
class MyClass {
private Status status;
}
然后,做你的Hibernate映射如下:
<class name="MyClass">
<id name="id">
<generator class="native"/>
</id>
<property name="status">
<type name="org.hibernate.type.EnumType">
<param name="enumClass">com.igalia.enumerates.Status</param>
</type>
</property>
</class>
仅此而已。 如果你喜欢使用JPA注释来代替的hbm.xml,使用@Enumerated(EnumType.STRING)。 点击此处查看:
在Hibernate中枚举