java - Hibernate 相当于 EclipseLink 的批量查询提示?

标签 java hibernate jpa ejb eclipselink

我喜欢的一件事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/

相关文章:

java - 什么是PECS(生产者扩展了 super 消费者)?

java - JPA实体类为什么会有实体名加下划线的类

Java/Hibernate JPA : InheritanceType. TABLE_PER_CLASS 和 ID

java - 未定义 [javax.persistence.EntityManagerFactory] ​​类型的合格 bean"}}

java - 如何将多个字段分配为实体的主键(使用 JPA)

java - Neo4j - 关系扩展器已弃用,使用最低共同祖先

java - 为什么带有前导零的整数文字会被奇怪地解释?

java - 在java和sql server中的存储过程中传递列名?

java - 如何使用 setMaxResults 更新 hibernate 查询?

java - 来自 db 乐观字段的 Netbeans 实体类