gpt4 book ai didi

java - 如何使用 Hibernate 检索集合的特定成员?

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:04 24 4
gpt4 key购买 nike

我想知道是否有任何方法可以检索记录及其集合成员的具体数量。

我有一个名为 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/

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