繁体   English   中英

Hibernate初始化实体的组/集合

[英]Hibernate initializing a group/collection of entities

我有一个查询,可在页面中获取实体。 每页包含100个实体。 对于那100个实体,我需要获取一些懒惰的嵌套实体。

发生的是,我对主要实体执行了1个SELECT,然后对嵌套实体执行了100个SELECT。

我正在寻找一种方法来批量初始化这100个嵌套对象,因此总的来说,我对主实体有1个SELECT,对嵌套实体有1个。

我的结构如下,如果不进行更改,我希望(我们在EAGER抓取中遇到很多问题)

public class MyMainEntity {
    private NestedEntity nested;

    @Override
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL,  orphanRemoval = true)
    @JoinColumn(foreignKey = @ForeignKey(name = "exFK_Nest_Enth"))
    public NestedEntity getNested() {
        ...
    }

有没有办法用Hibernate.initialize()做到这一点

您可以使用Hibernate Criteria查询来获取MyMainEntity并使用criteria.createAlias(“ nested”,“ ns”,Criteria.Subselect)。 它将触发两个查询; 一个用于获取MyMainEntity,另一个用于与MyMainEntity查询嵌套作为子查询。 如果使用Criteria.Join,它将仅触发一个查询,并同时获取MyMainActivity和Nested

默认情况下,休眠它遵循JPA 2.0规范的最新版本:

与以下关系:

ToMany: Lazy
ToOne: Eager

但是,如果您使用的是较早版本的Hibernate,则默认情况下所有关系都来自Lazy

在这种情况下,如果您想尝试检索子关系,请使用JOIN FETCH ,例如:

Select m from MyMainEntity m JOIN FETCH m.nested;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM