2012-08-02 128 views
0

請看看我以前的問題,以獲得背景。枚舉集JPA 2.0

List of enum vs. class of booleans

不過,我的問題是枚舉集如何與JPA 2.0和數據庫工作。由於我可能將值保存爲字符串(因爲我不希望冒失去映射的風險),所以在集合中說> 20枚枚舉的enumset可能是一種非常無效的方式來存儲與bool類相比較的數據。

考慮不同角色的用戶表:

user | password | role (enum) 
adm 1223  admin, guest, www, lab, elevator, ap, // Might be more than > 20 
sam 0000  admin 

.......

我應該怎麼選擇呢?你有什麼想法?

問候

+0

這聽起來像極端的過早優化。 – djechlin 2012-08-03 18:33:42

回答

3

以上數據庫設計是不是你應該如何存儲角色的用戶。它沒有被標準化(因爲你在單個列中有多個值),因此很難查詢。例如,如何查詢所有具有guestap角色的用戶?

更改設計,以類似的東西:

user table : id, name, passord 
role table: id, name 
user_role join table: user_id, role_id 

在JPA方面,你只會有一個User實體,Role實體,這些實體之間的ManyToMany協會:用戶有0,1或幾個角色,角色由0,1或幾個用戶持有。

+0

謝謝,我想我選擇一個布爾類作爲一個具有多個選擇器的對象,併爲具有單個選擇器的對象枚舉類型。 – kungcc 2012-08-02 18:00:24

0

如果你想以相對較小的二進制形式存儲信息,我會去EnumSet,如果你想能夠按類型查詢,那麼我會選擇@ElementCollection