Hibernate的枚举映射(Hibernate enum mapping)

2019-08-21 15:22发布

我需要哪些事前没有实现该接口到现有的数据库,其中存储枚举在同一个表使用所有者类枚举映射@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(我需要一个自定义的映射检索,这将尝试实例化枚举使用指定的枚举类?是否休眠原生支持此功能?)。

Answer 1:

它可以创建一个自定义的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休眠核心-不知道它在休眠的批注在写作的时候是,但是看到迭戈的回答 )。



Answer 2:

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中枚举



文章来源: Hibernate enum mapping