gpt4 book ai didi

hibernate - 如何与 JPA/Hibernate 建立基本的多对多关系?

转载 作者:行者123 更新时间:2023-12-04 05:07:15 25 4
gpt4 key购买 nike

我有一个非常基本的多对多关系:人员和项目,设置如下:

人:

@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name = "person_project",
joinColumns = @JoinColumn(name = "Person_Id"),
inverseJoinColumns = @JoinColumn(name = "Project_id"))
private Set<Project> projects = new HashSet<Project>();

项目:
@ManyToMany
@JoinTable(name = "person_project",
joinColumns = @JoinColumn(name = "Project_Id"),
inverseJoinColumns = @JoinColumn(name = "Person_id"))
private Set<Person> persons = new HashSet<Person>();

更新 Person 时,可能会指定新项目。我为 Person 设置了一个 JPARepository,我使用 saveAndFlush(...) 来保存可能的新项目与 Person。

这适用于一个人。如果我添加一个新项目,它将与 Person 一起保存,并且数据库中的表会正确更新。但是,如果我然后为另一个人添加相同的项目 - 它将从第一个人中删除!连接表中第一个人的 id 被替换为第二个人的 id。

这是什么原因造成的?我的关系设置不正确吗?

最佳答案

您不会在映射的两半上使用相同的注释。第一部分定义连接表和列。映射的后半部分只需要知道另一半的名称(在您的情况下是项目),它将从第一个注释中获取详细信息。有关体面的解释,请参阅:Hibernate Many to Many Mapping

关于hibernate - 如何与 JPA/Hibernate 建立基本的多对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15383172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com