2012-11-13 47 views
3

我已經四處尋找一些答案,但它們不足以滿足我。我希望這不會重複。具有數據庫支持最佳實踐的Java枚舉

我有一個數據應該是恆定的應用程序。這些數據可以稍後修改,所以我目前的方法是使用一個單獨的表格和這個常量,這個常量是從其他表格引用的。該表具有列ID和列值。該表由具有ID和值的Java對象表示。

當我想比較這些常量時出現問題。比較使用它的ID似乎對我來說很難看,所以我儘管使用枚舉來比較它們。但是這看起來很尷尬,因爲我將在用作「類型」的類中使用ENUM。所以我也在JPA的@enumerated註釋中思考......但說實話,我沒有看到最好的方式來做到這一點。我敢肯定的是,我絕對想要 - 某種程度上 - 這個常量數據存儲在數據庫中。

回答

2

在我的頭頂上,我可以考慮以下方法。

  1. 創建enum並將其名稱映射到數據庫。這種方法很簡單,並且可以工作。它的缺點是DB中的字符串太多。所以,如果枚舉元素名稱正在更改,您必須修復數據庫。琴絃佔據空間。如果您想將其用於查詢條件,則此類字段需要建立索引。
  2. 創建enum並將其序號映射到數據庫。這也很簡單,但DB需要維護,即使一個枚舉元素的順序改變了。而且DB數據的可讀性較差。

#1和#2都有一個共同的缺點:實際上數據存儲了兩次:一次硬編碼爲枚舉。兩次DB。如果你必須修改數據,你必須在兩個地方完成。修改必須在開發過程中完成,因爲enum必須重新編譯。

然而,還有其他solution,提供所謂的「動態枚舉」。看一看。這個解決方案可能會幫助你。

0

數據可以在以後修改,不再是恆定的,而是可變的... ;-)

總之:如果可能的值的列表可以隨時間而改變,我覺得用枚舉和沒有問題@枚舉JPA註釋。

如果這些值本身可以改變,您將需要某種名稱/值映射,以避免使用ID進行比較。您還可以將「屬性」添加到Enums,您可以將它用於數據的可變部分。這樣,只有Enums的名稱將作爲常量字符串存儲在數據庫中(作爲標識符),並且「值」可以在您的代碼中更改。

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html