[英]Persist an entity that have associated a list of entities that use @idclass
[英]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類?
解決方案:
我可以創建一個Commentable類,如下所示:
Public class Commentable{ private Set<Comment> comments = new HashSet<>(); }
然后讓User,Product,.. etc對其進行擴展,但這將是一個問題,因為我有多個與Comment類似的類,例如Rating,那么我將擁有Rateable等類。
我確定我缺少一個設計模式或一個面向對象的編程概念。
非常感謝
您可以擁有一個Comment
類,只要它是單向的,並且擁有方(負責關系的)是User
, Product
等。這需要您具有映射表(如UserComment
和ProductComment
以及對comments
集的一些補充。
如果注釋很簡單,它們也可以是可嵌入的,而直接存儲在映射表中。
如果您不想使用任何映射表並希望以JPA方式進行操作,則可以使用解決方案選項1,其中Comment
是UserComment
等的基類。然后,您可以使用單個表繼承策略並添加/重用“容器”(用戶,產品等)ID的列。
這樣做的一個缺點是您可能會在每個容器中再增加一列,或者如果您重復使用列(即,該值的含義取決於區分符),則您的容器實體需要具有類型兼容的ID(例如,所有整數或字符串) ),則您可能無法使用外鍵約束(除非您的數據庫支持“部分”外鍵約束,而我所知沒有db)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.