当前位置: 首页 > 面试题库 >

Hibernate中的枚举

呼延晋
2023-03-14
问题内容

在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+。



 类似资料:
  • 问题内容: 在我的MySQL数据库中,有“ gender enum(’male’,’female’)”列 我创建了枚举“ com.mydomain.myapp.enums.Gender”,并在我的实体中定义了“性别”。 现在,我想将枚举类型保留在我的MySQL数据库中,但是当我启动应用程序时,我得到: 性别列在MyApp.Person中的列类型错误。找到:枚举,预期:整数 为什么是这样?这就像我用

  • 问题内容: 我需要预先将未实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate本身是否支持此功能?)。 问题答案: 可以创建一个自定义(例如thi

  • 问题内容: Hibernate提供的注释支持使用或的两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即hibernate尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了

  • Spring 3.x、JPA 2.0、Hibernate 4.x、Postgresql 9.x. 使用希望映射到Postgresql枚举的枚举属性处理Hibernate映射类。 使用枚举列上的where子句进行查询会引发异常。 SQL: Hibernate xml查询: > 按而不是按枚举查询工作正常。 没有数据库交互的Java工作良好: 不是,与和相同,异常更改为: 在查看https://sta

  • 我需要弄清楚如何使用定义为以下内容的枚举参数列表应用基于注释的筛选: 所以我的如下所示: 我见过很多关于如何对单个枚举值进行条件查询和筛选的问题,但还没有关于对一组枚举值进行筛选的问题。是否有一种方法可以显式地强制转换单个值?

  • 使用EnumClass: 筛选器位于父实体上: 过滤器是这样设置的: 和其他几个。 这里的任何帮助或提示都将不胜感激。谢了!