gpt4 book ai didi

java - Hibernate (JPA) 多个@OneToMany 用于同一模型

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:55 25 4
gpt4 key购买 nike

我有两个模型。

@Entity
public class Student
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
protected long id;

@?
protected Address homeAddress;

@?
protected Address schoolAddress;
}

@Entity
public class Address
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
protected long id;

@?
protected List<Student> students;
}

我需要在 homeAddressschoolAddressstudents 上方添加哪些 JPA/hibernate 注释才能使关联生效?

当然,我已经尝试了很多东西,但没有任何效果。例如设置

    @ManyToOne
@JoinColumn (name="student_homeAddress_id", updatable = false, insertable = false)
protected Address homeAddress;

@ManyToOne
@JoinColumn (name="student_schoolAddress_id", updatable = false, insertable = false)
protected Address schoolAddress;

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinColumns({
@JoinColumn(name = "student_homeAddress_id", referencedColumnName = "student_homeAddress_id"),
@JoinColumn(name = "student_schoolAddress_id", referencedColumnName = "student_schoolAddress_id")})
@IndexColumn(name="students_index")
protected List<Student> students;

yealds 在 org.hibernate.mapping.Table(Address) 及其相关的 super 表和辅助表中找不到逻辑名称为 student_homeAddress_id 的列。还尝试使用 mappedBy 但它需要一个参数(不能做 mappedBy="student_homeAddress_id, student_schoolAddress_id"

还考虑将 JoinColumns 移动到 Student 平板电脑,但我不确定 OneToMany 和 ManyToOne 的注释应该是什么样子,因为我有多个地址,其中有 JoinColumns没有多大意义。

确实起作用但没有建立关联的是:

    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.EAGER)
@JoinColumn(name="address_id")
@IndexColumn(name="students_index")
protected List<Student> students;

使用它,当在数据库中存储模型时,student_homeAddress_id 和 student_schoolAddress_id 始终为 null,即使在存储两端(Student 和 Address 模型)之后也是如此。

我的想法是,在Address表上会有3个额外的列:student_homeAddress_id(homeAddress的Student表中Student的id),student_schoolAddress_id(homeAddress中Student的id) schoolAddress 的学生表)和 students_index(students 列表中从 0 开始的位置)。这应该足够了,对吗?

有什么想法吗?

非常感谢!

最佳答案

我们尝试了 mael 的建议,但无法实现。

我们最终关注了 this哪个有效。

换句话说,我们有OneToMany关系:

学生上:

protected List<AddressStudentAssociation> addresses;

地址上:

protected List<AddressStudentAssociation> students;

AddressStudentAssociation 上:

@ManyToOne
@PrimaryKeyJoinColumn(name="STUDENTID", referencedColumnName="id")
private Student student;
@ManyToOne
@PrimaryKeyJoinColumn(name="ADDRESSID", referencedColumnName="id")
private Address address;

加上一个参数将一个地址与另一个地址分开(isHome)。

最后,在 Student 中,我们有 public Address getHomeAddress() 遍历 addresses 列表并返回正确的地址。我们还必须尝试使用​​注释才能使其正常工作。总的来说不是最优的,但它有效,我们已经花了太多时间试图让事情发挥作用。 :|

关于java - Hibernate (JPA) 多个@OneToMany 用于同一模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12860781/

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