一尘不染

Hibernate中的枚举

hibernate

在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中映射枚举类?如果不是,我表示枚举的模式是否足够好?人们还会使用其他哪些模式?


阅读 279

收藏
2020-06-20

共1个答案

一尘不染

使用hibernate或JPA批注:

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

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

我无法想象这仅限于注解,但我实际上并不知道如何使用hbm文件。我猜这可能取决于版本,但是我很确定需要hibernate3.2+。

2020-06-20