首次尝试使用Java Persistence批注创建多对多关系。
场景:
Java类Project
包含子项目,而子项目只是List
中的Projects
。没有反向成员(没有超级项目)。因此,我认为多对多关系将是完美的
@ManyToMany(fetch = FetchType.EAGER, targetEntity = ProjectEntity.class, mappedBy = "project")
@Override
public List<ProjectImpl> getSubProjects() {
return super.getSubProjects();
}
Q1:这是保留带有子项目列表的项目的正确方法吗?
Q2:另外,我目前收到错误:mappedby reference an unknown target property
。我发现了这个错误率很高的线程:mappedBy reference an unknown target entity property,但是我这里没有一对多/多对一的逆或两个不同的类
编辑:基于反馈,我根据https://docs.jboss.org/hibernate/stable/annotations/reference/en/html/entity.html#entity-mapping-association-collections中的示例将关系更改为一对多,并添加了JoinTable批注。但是我收到错误A Foreign key refering de.otsd.worklog.database.ProjectEntity from de.otsd.worklog.database.ProjectEntity has the wrong number of column. should be 2
)
@OneToMany(fetch = FetchType.EAGER, targetEntity = ProjectEntity.class)
@JoinTable(
name = "ProjectToSubproject",
joinColumns = @JoinColumn(name = "project_id"),
inverseJoinColumns = @JoinColumn(name = "subproject_id")
)
@Override
public List<ProjectImpl> getSubProjects() {
return super.getSubProjects();
}
@EmbeddedId
@Override
public ProjectKey getProjectKey() {
return new ProjectKeyEntity(super.getProjectKey());
}
答案 0 :(得分:1)
我猜您根本不需要mapbyby,因为它不是双向的。您可能应该指定用于多对多的链接表(除非您将其更改为一对多)。