2013-11-26 24 views
1

我想知道是否有任何方法来检索记录和其收集成员的具体数量。如何使用Hibernate检索集合的特定成员?

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

“如果我执行这些学生的选择子句检索那些可我最终为组记录执行内选择学生因为每个学生记录都有一个组字段。“什么? – Taylor

+0

@泰勒我已经改写了它,请让我知道它现在是否可读 – J888

+0

是的,它可能基于学生和组ID的搜索ID。如果你使用上面的学生实体和Mygroup你可能会遇到正常形式.U会得到多余的stundent数据。你应该检查最小化冗余数据在实体,这将完美的设计。 – gks

回答

0

在由DEF休眠所以如果你在学生表上执行一个select子句并且默认地为一个学生对象提取学生,那么你将获得组ID作为外键,并且我认为并非关联组对象的所有记录都会如果你想获取与该组对象相关联的学生列表,那么你可以做到这一点,但由于与组对象关联的学生的延迟加载列表不会获取一次性。我认为这是你的主要问题。不想取得与某个团体相关的学生名单。我认为你现在的学生表格结构会是这样的。

id name group_id 
1 jack 1 
2 joe 2 
3 Mack 1 

,如果你可以添加的一个多场布尔然后将查询可以更具体就像属于一组ID和avialble真正的学生。

Boolean available 

现在你的学生表结构会是这样的。

id name group_id available 
1 jack 1   true 
2 Joe 2   true 
3 Mack 1  false 

所以现在ü可以查询基于可用的布尔领域特定的一组学生的

+0

添加可用字段是什么意思?我在我的学生课上有这个字段,我想一次检索所有在一个组中的学生记录,因为懒惰设置我只记得这个组不会一直被检索到,但是还有另一个问题,那就是冗余需要解决。 – J888

+0

@ J888你只是在可用字段的基础上或基于可用和组的基础上检索,如果你在两者的基础上查询,那么你将不会获得冗余数据 – Deepak

+0

我只想列出所有学生谁是可用的字段是真实的(但我需要知道他们是哪个组,因此我需要检索这些组) – J888

相关问题