使用 Hibernate Annotations 映射枚举类型

Posted

技术标签:

【中文标题】使用 Hibernate Annotations 映射枚举类型【英文标题】:Mapping enum types with Hibernate Annotations 【发布时间】:2011-02-03 20:56:18 【问题描述】:

我的 Java 模型上有一个枚举类型,我想将它映射到数据库中的一个表。我正在使用 Hibernate Annotations,但我不知道该怎么做。由于我搜索的答案比较老,我想知道哪种方式最好?

提前致谢

【问题讨论】:

【参考方案1】:

除了@Enumerated 注释之外,您还需要其他东西吗?例如下面的枚举:

public enum MyEnum  
    VALUE1, VALUE2; 
  

可以这样使用和注释:

private MyEnum myEnum;
@Column(name="myenum") 
@Enumerated(EnumType.ORDINAL) 
public MyEnum getMyEnum()  
    return myEnum 

您可以使用@Enumerated 注释的EnumType 枚举属性指定枚举应如何持久保存在数据库中。 EnumType.ORDINAL 指定枚举将作为整数值保存。这里,myEnum 设置为 VALUE1 将被持久化为 0,VALUE2 为 1,等等。

另一种方法是使用EnumType.STRING 指定枚举将使用该字段设置为的枚举值的名称进行持久化。所以,应用到前面的例子中,将字段myEnum 设置为MyEnum.VALUE1 将保持为VALUE1 等。

【讨论】:

谢谢!我想这正是我想要的。我去试试 我可以为枚举类的@Id 字段输入什么? @Thiago 什么?您的枚举通常不是实体,它没有 @Id 字段。您能否更新您的问题以显示您在做什么? 搞定了。我试图像实体一样使用枚举并在 Java 端使用它的类型安全性,但我知道 Hibernate 将一个字符串关联到每个枚举(或整数,取决于 EnumType),所以当你要求他保存时,他会填写与查询上的字符串自动。非常感谢! 你可以为每个枚举分配一个数值并以某种方式保持它吗?

以上是关于使用 Hibernate Annotations 映射枚举类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Hibernate Annotations 映射枚举类型

Hibernate Annotations/JPA 映射集合

是否可以使用 Hibernate 或 JPA Annotations 限制 @OneToMany 集合的大小?

使用 Apache Ivy 获取 Hibernate Core 和 Hibernate Annotations 时遇到问题(但它也与 Maven2 相关。)

使用hibernate出现log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Versio

spring 4 mvc + Hibernate + Annotations 配置堆内存问题