我想知道是否有任何方法可以检索记录及其集合成员的具体数量。
我有一个名为 MyGroup 的类(class),它保存学生列表,每个学生一次可以属于一个组。我需要检索每组可用学生的列表。如果我检索每个组的所有学生并找到可用的学生,则需要大量内存来运行集合中的循环并检查每个学生的可用字段。
另一方面,(双向)如果我对学生执行 select 子句来检索那些可用的学生,这样我也会检索小组类(class)记录(因为它是学生的成员)。因此,对于每个学生,我都会检索其字段+组的字段。
示例数据
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
类(class)
@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
}
最佳答案
在 hibernate 中,默认情况下延迟加载是正确的,因此如果您在学生表上执行 select 子句并获取学生,那么默认情况下使用一个学生对象,您将获得组 id 作为外键,我认为并非所有关联组对象的记录将立即获取。如果您想稍后获取与组对象关联的学生列表,您可以这样做,但由于延迟加载与组对象关联的学生列表不会立即获取。我认为这是您的主要问题。您不想立即获取与某个组关联的学生列表。我认为您当前的学生表结构将是这样的。
id name group_id
1 jack 1
2 joe 2
3 Mack 1
如果您可以再添加一个可用的 boolean 字段,那么您的查询可以更加具体,例如属于某个组 ID 且可用 true 的学生。
Boolean available
现在你的学生表结构将是这样的。
id name group_id available
1 jack 1 true
2 Joe 2 true
3 Mack 1 false
现在您可以根据可用的 boolean 字段查询特定的学生组
关于java - 如何使用 Hibernate 检索集合的特定成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207141/