枚举在hibernate

在DAO中有一个值来自Java枚举的字段通常很有用。 一个典型的例子是一个loginDAO,其中通常有一个字段表示用户为“NORMAL”或“ADMIN”。 在Hibernate中,我将使用以下两个对象以(半)types安全的方式表示这种关系:

class User { String username; String passwd; UserType type; } class UserType { private enum Type {ADMIN, NORMAL}; private String type; //Setters/Getters for Hibernate public void setType(String type); public String getType(); //Setters/Getters for user public void setUserType(UserType.Type t); public UserType.Type getUserType(); public static UserType fromType(UserType.Type t); } 

这是有效的,但是我发现UserType类不够用,需要太多的官僚作风来存储一些值。 理想情况下,Hibernate应直接支持枚举字段,并创build一个额外的表来存储枚举值。

我的问题是:是否有任何方法直接映射在Hibernate的枚举类? 如果没有,我的模式代表枚举足够好还是我错过了什么? 人们使用什么其他模式?

使用hibernate或JPA注释:

 class User { @Enumerated(EnumType.STRING) UserType type } 

UserType只是一个标准的Java 5枚举。

我无法想象这仅仅局限于注释,但实际上我不知道如何用hbm文件来做到这一点。 这可能是非常依赖版本,我猜,但我很确定,hibernate3.2 +是必需的。

编辑:这是可能的在一个hbm,但是有点凌乱,看看这个论坛主题

从Hibernate文档: http : //www.hibernate.org/272.html

您可以为每个枚举创build一个新的typedef,并在property标记中引用typedef。

示例映射 – 内联<type>标记

  <property name='suit'> <type name="EnumUserType"> <param name="enumClassName">com.company.project.Suit</param> </type> </property> 

示例映射 – 使用<typedef>

  <typedef name="suit" class='EnumUserType'> <param name="enumClassName">com.company.project.Suit</param> </typedef> <class ...> <property name='suit' type='suit'/> </class>