[英]Play 2 framework many-to-many relation better design
在我的應用程序中,我有不同的User
和Item
,因此每個用戶可以選擇許多項目。
在本教程中,我學習了@ManyToMany
注釋。
@Entity
public class Item extends Model {
...
@ManyToMany(cascade = CascadeType.REMOVE)
public List<User> users = new ArrayList<User>();
但我能想到的第二個選項是為User-to-Item關系定義一個單獨的類,這樣我就可以添加日期和時間等附加信息。
@Entity
public class ItemUserRel extends Model {
@Id
public Long id;
public User user;
public Item item;
//additional information
public Date date;
...
哪兩種選擇都是更好的設計,為什么?
我剛才遇到過類似的問題。 我還必須處理模型User
和模型Group
。 我的要求是:
用戶可以具有n個 readable
和n writable
組。 這些權限必須存儲在第三個表中(不在用戶而不在組表中)。 還有其他屬性,如authorisedBy
和'authorisedOn'。 所以@ManyToMany沒有工作,因為我沒有真正的控制權。 此外,附加屬性使得很難通過JPA進行映射。
也許其他設計是可能的,但我(仍然)認為引入一個新類UserGroup
是最好的。 此類與單個User
具有@ManyToOne
關系。
我最終定義了這三個模型:
permissions
, authorisedBy
, authorisedOn
等。 在我的用戶模型,我會消氣getUserGroups()
也getPersonalGroup()
這基本上是一個(個人)的實例Group
在getUserGroups()
但其中createdBy
和authorisedBy
是相同的用戶。
我發現這個設計更易於維護,更清晰。 此設計也幫助我創建了一個舒適的用戶界面,管理員可以在其中管理和更改UserGroup的權限。
也許更有用的信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.