在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文件.它可能是非常依赖于版本的,我猜,但我很确定hibernate 3.2+是必需的.
编辑:有可能在一个hbm,但是有点凌乱,看看这个论坛帖子
从Hibernate文档:http://www.hibernate.org/272.html
您可以为每个枚举创建一个新的typedef,并在属性标记中引用typedef.
示例映射 - 内联
标记
com.company.project.Suit
示例映射 - 使用
com.company.project.Suit