JPA加入继承类

时间:2017-02-27 09:23:39

标签: java spring hibernate jpa

在jpa中,我现在有一些实体(ContentProduct,但还有更多可以加入Comment实体。

问题是我不希望在每个连接实体(Products,Contents ..)的Comment实体中都有额外的字段(和表中的列),因为这些实体将来会增加。

我发现一个半解决方案是使用单表继承并创建具体的注释类,如CommentContentCommentProduct,并使用鉴别器列,但仍然保留加入实体(内容和产品)。 / p> 你有什么建议吗?

修改:

评论和内容之间的示例关系将 @MayToOne ,许多评论属于一个内容,因此对于产品..

修改2

在纯表关系模式中(没有像hibernate / jpa这样的ORM)我可以和我做这种解决方案: 添加到评论表 1-item_type 中的列和 2-item_id 女巫item_type指定其他边名表(产品,我的问题中的内容)和item_id指定表的外键它的名字是在item_type列

如何在Jpa / hibernate ORM中对此进行建模?

3 个答案:

答案 0 :(得分:1)

您可以使用Hibernate描述您所描述的内容,如

class Content {
  @OneToMany
  @JoinColum(name = "item_id")
  @Where("item_type = 'CONTENT'")
  Set<Comment> comments;
}

class Product {
  @OneToMany
  @JoinColum(name = "item_id")
  @Where("item_type = 'PRODUCT'")
  Set<Comment> comments;
}

class Comment {
  @Id
  @GeneratedValue
  Long id;
  @Enumerated(STRING)
  ItemType itemType;
  Lont itemId;
}

enum ItemType {
  CONTENT,
  PRODUCT
}

答案 1 :(得分:0)

这是什么类型或关系?

如果是 @OneToOne ,您可以在产品和内容中放置与评论关系的信息,在评论中使用选项MappedBy来映射它们,您将跳过评论中的额外列。

如果是 @OneToMany ,您将无法在Comment中创建任何列,而是再次将信息放入“产品和内容”中,并仅在评论时使用mappedBy对此对象进行收集站点。

CheckForMoreInfo

答案 2 :(得分:0)

您可以为即将推出的实体尝试@ManyToOne。所以这里你不需要在Comment实体(基表)中添加新列检查这个例子:https://howtoprogramwithjava.com/hibernate-manytoone-unidirectional-tutorial/