我喜欢的一件事EclipseLink有这个伟大的东西叫做 batch query hint ,我还没有找到与之对应的 Hibernate。
基本上做一大堆连接很快就会变得很乱,你最终查询的数据比你需要的多得多(记住,如果你将一个人连接到 6 个地址,那么这个人的信息会返回 6 次;现在继续乘以它额外的连接)。
假设一个 Person 实体具有 0:M 的地址、电子邮件、电话和订单历史记录集合。加入所有不好但用批处理方法:
List persons = entityManager.createQuery("select p from Person p"
.setHint(QueryHints.BATCH, "p.address")
.setHint(QueryHints.BATCH, "p.email")
.setHint(QueryHints.BATCH, "p.phone")
.setHint(QueryHints.BATCH, "p.orderHistory")
.getResultList();
这将对 Person 表进行查询,仅此而已。当您第一次访问地址记录时,它将对整个 地址表执行单个查询。如果您在 Person 表上指定了 where 子句,则同样的条件也将用于地址加载。
因此,您不是进行 1 次查询,而是进行 5 次查询。
如果您使用联接来执行此操作,您可能在一个查询中获得所有数据,但由于联接,您很可能会加载更多数据。
无论如何,我已经在 Hibernate 文档中寻找与此等效的内容,但没有看到。有吗?
最佳答案
没有。
关于java - Hibernate 相当于 EclipseLink 的批量查询提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467375/