簡體   English   中英

與多個實體關聯的實體

[英]An entity that associated to multiple entities

我有多個這樣的實體:

Public class User{
    int age;
    .
    .
    .
    @OneToMany
    private Set<Comment> comments = new HashSet<>();
}

Public class Product{
    String name;
    .
    .
    .
    @OneToMany
    private Set<Comment> comments = new HashSet<>();
}

還有很多。 如您所見,評論可能與用戶,產品等相關聯。 我該如何進行這樣的Comment類?

解決方案:

  1. 我可以為每個實體使用多個Comment類,例如UserComment,ProductComment等。但是,我相信有更好的方法可以做到這一點。
  2. 我可以創建一個Commentable類,如下所示:

     Public class Commentable{ private Set<Comment> comments = new HashSet<>(); } 

然后讓User,Product,.. etc對其進行擴展,但這將是一個問題,因為我有多個與Comment類似的類,例如Rating,那么我將擁有Rateable等類。

我確定我缺少一個設計模式或一個面向對象的編程概念。

非常感謝

您可以擁有一個Comment類,只要它是單向的,並且擁有方(負責關系的)是UserProduct等。這需要您具有映射表(如UserCommentProductComment以及對comments集的一些補充。

如果注釋很簡單,它們也可以是可嵌入的,而直接存儲在映射表中。

如果您不想使用任何映射表並希望以JPA方式進行操作,則可以使用解決方案選項1,其中CommentUserComment等的基類。然后,您可以使用單個表繼承策略並添加/重用“容器”(用戶,產品等)ID的列。

這樣做的一個缺點是您可能會在每個容器中再增加一列,或者如果您重復使用列(即,該值的含義取決於區分符),則您的容器實體需要具有類型兼容的ID(例如,所有整數或字符串) ),則您可能無法使用外鍵約束(除非您的數據庫支持“部分”外鍵約束,而我所知沒有db)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM