2015-03-13 47 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)進行轉換。

相關問題