我想知道是否有办法检索记录及其特定数量的集合成员。
我有一个叫做MyGroup的班级,里面有学生名单,每个学生一次可以在一个班组。我需要检索每组的可用学生列表。如果我检索每个组的所有学生并找到可用的学生,则需要大量的记忆才能在整个系列中循环并检查每个学生的可用字段。
另一方面,(双向)如果我对学生执行select子句以检索那些可用的学生,这样我也会检索组类记录(因为它是学生的成员)。因此,对于每个学生,我正在检索其字段+组的字段。
示例数据
Group 1
Name available
Jack true
Luke false
Nou true
...
Group 2
Name available
Mike false
George false
Alex true
...
预期结果
Name Available Group GroupName
Jack true 1 Wolfs
Nou true 1 Wolfs
Alex true 2 Tigers
课程
@Entity
public class Student {
@Id
@GeneratedValue
private long id;
private String name;
private boolean available;
@OneToOne
private MyGroup group;
getters and setters
}
@Entity
public class MyGroup {
@Id
@GeneratedValue
private long id;
private String name;
@OneToMany
private List<Student> student = new ArrayList();
getters and setters
}
答案 0 :(得分:0)
在hibernate中默认延迟加载是真的,所以如果你在学生表上执行一个select子句并且默认情况下用一个学生对象取得学生,你会得到组ID作为外键,我想不是全部相关组对象的记录将获取atonce。如果你想获取与组对象相关联的学生列表,你可以这样做,但由于与组对象关联的学生的延迟加载列表将无法获取atonce。我认为这是你的主要问题。你不想获取与团队atonce相关的学生名单。我认为你现在的学生表结构将是这样的。
id name group_id
1 jack 1
2 joe 2
3 Mack 1
如果你可以添加一个可用的字段布尔值,那么你的查询可以更加具体,就像属于一个组ID和avialble true的学生一样。
Boolean available
现在你的学生表结构将是这样的。
id name group_id available
1 jack 1 true
2 Joe 2 true
3 Mack 1 false
所以现在你可以根据可用的布尔字段查询特定的学生集