如何映射涉及抽象类的JPA双向关系?

时间:2016-03-31 14:41:51

标签: jpa one-to-many

假设以下简单架构:

实体表 - 所有实体共有的属性

entityId, timeCreated,...

评论表 - 某些实体拥有这些

的集合
entityId, commentId, commentText,....

人员表。

pensonId (entityId), firstName, lastName,...

以下Java继承结构:

BaseEntity - abstract - entity, join inheritance with a discriminator
    CommentedEntity - abstract - introduces `comments` collection - mapping tbd
        Person - concrete - entity - mapping trivial

我们如何映射CommentedEntityComment之间的双向关系?下面的代码是我对我找到的例子的最佳解释。

CommentedEntity

@OneToMany(mappedBy="owner", fetch=FetchType.EAGER)
private List<Comment> comments = new ArrayList<>();

评论

@ManyToOne(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="entityId", referencedColumnName="entityId")
private CommentedEntity owner;
  • 由于CommentedEntity是一个抽象类,因此不起作用。 owner引用了一个未知实体。
  • CommentedEntity成为一个实体,需要给它一个id,所以我不认为这样做 感。
  • 由于多个具体实体将comments 集合,具体实体名称不能用于映射。

我们如何双向映射person.commentList属性?

1 个答案:

答案 0 :(得分:0)

如果Person延伸CommentedEntity,那么CommentedEntity实体就不需要owner Person,因为Person is part of a CommentedEntity`。换句话说,不需要所有者字段,因为Person是CommentedEntity。