2015-03-13 72 views
0

我有一个支持bean内的enum属性,它有2个属性:“id”(int attribute)和“label”(String attribute)。在数据库中,我只需要保留“id”,但我仍然需要在我的视图中使用标签值。问题是:@Enumerated只给我选择持久使用EnumType.ORDINAL或EnumType.STRING。有什么办法可以坚持数据库中枚举的“id”属性? (顺便说一句,我使用休眠)。如何在Hibernate中持久化Enum的特定属性?

谢谢!

+0

你能解释一下为什么你需要控制枚举值如何存储在数据库中?无论哪种方式,只要重新装入值,您就可以访问该值的所有部分,因此主要关注的通常是通过其他机制访问数据库或管理对实体定义的更改。 – 2015-03-13 13:08:04

回答

1

fd的评论已到位。尽管如此,如果您真的需要这样做,您可以稍微调整一下解决方案,而不是坚持枚举,您可以将其标记为瞬态并添加一个属性,例如enumId到一个实体类,你会坚持代替。比唯一剩下的就是通过getter和setter方法同步枚举的值enumId

0

id和属性是同一事物的两个方面。它们具有相同的含义。将它们存储在数据库中是多余的,违反了数据库设计的第三范式。

对于JPA(Hibernate)实体,我建议你定义ORDINAL(这是id)作为你的字段,正如上面“Master Slave”所建议的那样,将String定义为一个瞬态。然后定义@PostLoad和id的setter以使用name()将该序号转换为名称(这是您的标签),并在标签的setter中使用valueOf(String name)进行转换。