ste*_*n35 0 java orm hibernate jpa hibernate-mapping
在OneToMany我的实体类中添加两个关联似乎无效。如果我删除其中之一,效果很好。
@Entity
@Table(name = "school")
public class School {
private List<Teacher> teachers;
private List<Student> students;
@OneToMany(cascade=CascadeType.ALL, mappedBy = "school", fetch = FetchType.EAGER)
public List<Teacher> getTeachers()
return this.teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
@OneToMany(cascade=CascadeType.ALL, mappedBy = "school", fetch = FetchType.EAGER)
public List<Student> getStudents()
return this.students;
}
public void setStudents(List<Student> teachers) {
this.students = students;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Teacher,Student我有正确的ManyToOne注释
@Entity
@Table(name = "teacher")
public class Teacher {
private School school;
@ManyToOne
@JoinColumn(name = "school_id")
public School getSchool() {
return this.school;
}
public void setSchool(School school) {
this.school = school;
}
}
@Entity
@Table(name = "student")
public class Student {
private School school;
@ManyToOne
@JoinColumn(name = "school_id")
public School getSchool() {
return this.school;
}
public void setSchool(School school) {
this.school = school;
}
}
Run Code Online (Sandbox Code Playgroud)
我也有id与正确的注释字段(@Id,@GeneratedValue)
所以对我来说@OneToMany,在同一堂课上,我似乎不能超过一个。它是否正确?
您可以具有多个一对多关联,只要其中一个是EAGER即可。
尽管您可以使用Set而不是List绕过此异常,但这并不是一件好事,因为您最终会得到笛卡尔积。
最好的办法是根本不使用EAGER。您应该对所有关联使用LAZY,并渴望通过查询时间FETCH指令和最多一个关联来获取many-to-one和关联。one-to-oneone-to-many
如果要获取多个one-to-many关联,则应将Hibernate.initialize(proxy)方法用于第二或第三关联,因为3个简单的select语句比笛卡尔乘积更好。
| 归档时间: |
|
| 查看次数: |
4249 次 |
| 最近记录: |