使用 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