我有一个查询,在页面中获取一个实体。每个页面包含 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()
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
默认情况下,休眠最新版本遵循JPA 2.0 规范:
与以下机构的关系:
ToMany: Lazy
ToOne: Eager
但是如果您使用的是旧版本的 Hibernate,则默认情况下所有关系都带有 Lazy
在这种情况下,当您想尝试检索子关系时,请使用JOIN FETCH,例如:
Select m from MyMainEntity m JOIN FETCH m.nested;
慕桂英546537
TA贡献1848条经验 获得超10个赞
您可以使用 Hibernate Criteria 查询来获取 MyMainEntity 并使用 criteria.createAlias("nested", "ns", Criteria.Subselect)。它会触发两个查询;一个用于获取 MyMainEntity ,另一个用于嵌套 MyMainEntity 查询作为子查询。如果你使用 Criteria.Join 那么它只会触发一个查询并获取 MyMainActivity 和 Nested
添加回答
举报
0/150
提交
取消