gpt4 book ai didi

mysql - Hibernate 映射中的一对多和多对一

转载 作者:行者123 更新时间:2023-11-29 02:23:31 24 4
gpt4 key购买 nike

public class ClassYear {
private Set<Examination> examination = new HashSet<Examination>();

@Id
@Column(name = "class_id")
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@DocumentId
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="class_id")
public Set<Examination> getExamination() {
return examination;
}

public void setExamination(Set<Examination> examination) {
this.examination = examination;
}
}

public class Examination {
private ClassYear classYear;

@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)
@JoinColumn(name="class_id")
public ClassYear getClassYear() {
return classYear;
}

public void setClassYear(ClassYear classYear) {
this.classYear = classYear;
}
}

所以在这里,Examination 表引用了 ClassYear 表的 class_id 列。现在我需要在其他几个表上使用 class_id 列。我应该怎么做..?这是一对多关系的概念,但我需要在许多表(比如 HomeWork 表)上使用该 class_id。我在 Internet 上搜索并找到了对一对多和多对一概念的解释,但我找不到确切的方法来处理多个表,其中一个表中的特定列是一对多关系。

最佳答案

Examination实体拥有关系,因此您应该将检查映射到 ClassYear 中实体(关系的非拥有方)使用 mappedBy像这样(没有连接列):

@OneToMany(mappedBy="classYear", cascade={CascadeType.ALL})
public Set<Examination> getExamination() {
return examination;
}

我删除了 EAGER此示例中的获取类型(@OneToMany 的默认值为 LAZY )。我不知道你的用例,但像这样总是急切地获取映射集合并不是最好的主意。

如果需要引用ClassYear在其他实体中,例如 HomeWork , 同理。 HomeWork实体将有 @ManyToOne映射到 ClassYear并且将是关系的拥有方(就像在 Examination 中一样)以及 ClassYear 的所有作业可以使用 mappedBy 进行映射在ClassYear实体。

还有一个小细节:

@ManyToOne(cascade={CascadeType.ALL},fetch=FetchType.EAGER)

@ManyToOneEAGER默认获取类型,因此您无需手动指定。

关于mysql - Hibernate 映射中的一对多和多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27486286/

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