Java持久性:@ManyToMany要列出<Projects>的项目

时间:2019-08-22 04:59:27

标签: java list jpa persistence

首次尝试使用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());
}

1 个答案:

答案 0 :(得分:1)

我猜您根本不需要mapbyby,因为它不是双向的。您可能应该指定用于多对多的链接表(除非您将其更改为一对多)。