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

标签 java hibernate hibernate-mapping

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

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

相关文章:

java - Hibernate - 自定义方言的 BigDecimal 列映射

java - hibernate : Resultset mapping in to Map<EntityTypeId, 列表 <EntitiyIds>>

java - 为什么我会出现 0 的无限循环? ( java )

java - 通过数据源配置属性与通过 hibernateProperties 配置属性

java - 在 Spring Data 中通过 @Modifying @Query 进行更新不起作用

java - hibernate : An association from the table application_category refers to an unmapped class: allin. beans1.Application

java - OneToOne 映射中的 MappedBy

java - Jersey + Spring 独立 web 服务 @Autowire 不工作

java - 此内容无法在框架中显示 - eclipse (displayHelpResource(href))

java - addListenerForSingleValueEvent 被多次触发