我有下一個問題: 我有一個「用戶」實體與「角色」有多對多的關係。事情是,「角色」被列舉(總是有5個),所以每當我獲取用戶時抓取它們似乎都沒有必要(因爲它們也很少改變)。我想以某種方式將角色保存在記憶中,並在我帶她時將其附加到用戶身上。值得注意的是,hibernate已經啓用了二級緩存,所以如果需要的話,我將能夠使用它。 有沒有人有這個解決方案?枚舉值與休眠和緩存
在此先感謝
我有下一個問題: 我有一個「用戶」實體與「角色」有多對多的關係。事情是,「角色」被列舉(總是有5個),所以每當我獲取用戶時抓取它們似乎都沒有必要(因爲它們也很少改變)。我想以某種方式將角色保存在記憶中,並在我帶她時將其附加到用戶身上。值得注意的是,hibernate已經啓用了二級緩存,所以如果需要的話,我將能夠使用它。 有沒有人有這個解決方案?枚舉值與休眠和緩存
在此先感謝
如果你可以改變你的數據模型,刪除表的角色和您的許多一對多表轉換成一個簡單多到一個表的外鍵的用戶,以及列保存角色(作爲varchar或數字,但我會建議使用varchar,因爲它更容易維護)。然後,您可以將此表映射如下所示:
@Entity
public class UserRole {
@ManyToOne
private User user;
@Column
@Enumerated(EnumType.STRING) // depends if column is varchar or number
private Role role;
}
public enum Role { ROLE1, ROLE2, ROLE3, ROLE4, ROLE5 }
注意,如果不刪除角色表,也可以,只要你的角色ID是0到4要做到這一點,利用EnumType.ORDINAL
映射(這是默認值)。如果它們是1到5,則在Role
enum的開頭添加一個虛擬角色。
但是,這將有效地創建OneToMany關係。所以這些條目看起來像(「用戶1」,「角色1」)(「用戶1」,「角色2」)(「用戶2」,「角色1」),我希望避免這種情況 – ShinySpiderdude 2013-03-10 15:53:07
當然,因爲你有這樣的要求將多個角色分配給單個用戶,您無法避免一對多關係。你只需要配置一些緩存,以避免每次都抓取它們,但使用這個解決方案,你根本不需要獲取角色,這似乎是你問的。 – 2013-03-10 21:30:47
答案在問題中,不是嗎?使用二級緩存。 (但我不確定這會有什麼重大區別,因爲通過ID在5行表中獲得角色已經非常快) – 2013-03-10 10:59:26
此外,您仍然可以緩存角色和用戶之間的關聯。 – benzonico 2013-03-10 15:58:22