【问题标题】:hibernate - How to annotate a property as enum with a fieldhibernate - 如何使用字段将属性注释为枚举
【发布时间】:2009-10-27 21:04:07
【问题描述】:

如何映射一个包含字段的枚举?

public enum MyEnum{
HIGHSCHOOL ("H"), COLLEGE("C")
private int value;
public MyEnum getInstance(String value){...}
}

@Entity
public class MyEntity {
@Enumerated(...)
private MyEnum eduType;
}

如何注释以便值 H、C 将持久保存在数据库中?如果我保留@Enumerated(EnumType.STRING),则 HIGHSCHOOL 而不是 H 将存储在数据库中。如果我使用EnumType.ORDINAL,数据库中将存储1而不是H。请提出解决方案。

【问题讨论】:

    标签: hibernate enums annotations


    【解决方案1】:

    在 Hibernate 中没有内置的方法可以做到这一点。如果你愿意,你可以写一个UserType 来为你做这件事。

    This 是一个好的开始,但是您需要替换 nullSafeSet()nullSafeGet() 实现来存储您的枚举代码(例如 'H' / 'C' / 你有什么)并返回正确的枚举实例以此为基础。

    如果您需要为多个枚举类型执行此操作,您可以实现ParameterizedType 接口以将枚举类型作为参数传递或使用反射来检索“代码”,只要访问器方法的命名一致。

    【讨论】:

      【解决方案2】:

      感谢 ChssPly76 的解决方案。我实现了一个用户类型,它运行良好。事实上,在hibernate社区中有一个例子可以将值/令牌持久化在枚举中。 Click here: StringValuedEnum

      【讨论】:

        猜你喜欢
        • 2011-06-29
        • 2019-03-08
        • 2013-08-14
        • 2011-08-15
        • 2012-02-14
        • 2011-12-19
        • 1970-01-01
        • 1970-01-01
        • 2019-04-30
        相关资源
        最近更新 更多