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列。我应该怎么做..?这是一对多的关系概念,但我需要在许多表上使用class_id(比如HomeWork表)。我搜索了互联网,找到了一对多的解释。多对一的概念,但我无法确切地找到如何为表中的特定列作为一对多关系的多个表执行此操作。
答案 0 :(得分:2)
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)
@ManyToOne
默认使用EAGER
抓取类型,因此您无需手动指定。