在DAO中具有一个其值来自Java枚举的字段通常很有用。一个典型的示例是登录DAO,您通常在其中具有一个将用户表征为“ NORMAL”或“ADMIN”的字段。在Hibernate中,我将使用以下2个对象以(半)类型安全的方式表示此关系:
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应该直接支持枚举字段,并会创建一个额外的表来存储枚举值。
我的问题是:有什么方法可以直接在Hibernate中映射枚举类?如果不是,我表示枚举的模式是否足够好?人们还会使用其他哪些模式?
使用hibernate或JPA批注:
class User { @Enumerated(EnumType.STRING) UserType type }
UserType只是一个标准的Java 5枚举。
我无法想象这仅限于注解,但我实际上并不知道如何使用hbm文件。我猜这可能取决于版本,但是我很确定需要hibernate3.2+。