假设以下简单架构:
实体表 - 所有实体共有的属性
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
我们如何映射CommentedEntity
和Comment
之间的双向关系?下面的代码是我对我找到的例子的最佳解释。
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属性?
答案 0 :(得分:0)
如果Person
延伸CommentedEntity
,那么CommentedEntity
实体就不需要owner
Person
,因为Person is part of a
CommentedEntity`。换句话说,不需要所有者字段,因为Person是CommentedEntity。