Hibernate 初始化一组/实体集合

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


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


我正在寻找一种方法来批量初始化这 100 个嵌套的,这样我总共有 1 个 SELECT 用于主实体,1 个用于嵌套实体。


我的结构如下,如果不改变我更喜欢(我们在 EAGER fetch 中遇到了很多问题)


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()


慕莱坞森
浏览 184回答 2
2回答

繁花不似锦

默认情况下,休眠最新版本遵循JPA 2.0 规范:与以下机构的关系:ToMany: LazyToOne: Eager但是如果您使用的是旧版本的 Hibernate,则默认情况下所有关系都带有 Lazy在这种情况下,当您想尝试检索子关系时,请使用JOIN FETCH,例如:Select m from MyMainEntity m JOIN FETCH m.nested;

慕桂英546537

您可以使用 Hibernate Criteria 查询来获取 MyMainEntity 并使用 criteria.createAlias("nested", "ns", Criteria.Subselect)。它会触发两个查询;一个用于获取 MyMainEntity ,另一个用于嵌套 MyMainEntity 查询作为子查询。如果你使用 Criteria.Join 那么它只会触发一个查询并获取 MyMainActivity 和 Nested
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java