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

时间:2013-11-26 01:53:41

标签: java hibernate hibernate-mapping

我想知道是否有办法检索记录及其特定数量的集合成员。

我有一个叫做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
}

1 个答案:

答案 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

所以现在你可以根据可用的布尔字段查询特定的学生集