繁体   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