java - 如何通过不对数据库进行 N 次调用来获取实体集合中的惰性属性

标签 java jpa eclipselink

如何通过不对数据库进行 N 次调用来获取实体集合中的惰性属性。示例:

transactions = getTransactionsBySomeCriteriaApiQuery(..); // n transactions
// this make 3*n calls to DB, I want to do only a few calls
transactions.forEach(res -> {
  res.getLazyCollection1().size();
  res.getLazyCollection2().size();
  res.getLazyCollection3().size();
});
return transactions;

假设 n 是一个大数。 我想知道是否可以通过不对数据库进行大量调用来获取惰性数据。我正在使用 JPA (eclipselink),关系数据库。

编辑:确实是N+1选择问题,我想知道如何在eclipselink中解决它。请注意,我不想将实体映射从惰性更改为急切,因为其他地方需要它。我尝试过使用 fetch joins(在 criteriaAPI 上获取),但是当使用多个时这不起作用。

最佳答案

使用FETCH JOIN来检索初始查询中实际需要的数据。

关于java - 如何通过不对数据库进行 N 次调用来获取实体集合中的惰性属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58268914/

相关文章:

java - 从mongo集合中检索数据collection.find(query)

java - Hibernate @ManyToOne 引用了一个未知实体

hibernate - 删除未完成

hibernate - jpa 将 java 类型映射到数据库类型

jpa - 可以覆盖位于 jar 依赖项中的 persistence.xml 中的属性

java - 封装别名字段的 JPQL 函数

java - 为什么compareTo BigInteger while 循环不退出?

java - JDOM 正在使用太多内存

java - 解析具有可变键值对的字符串

jpa - 如何修改 Eclipselink JPA 2.0 连接重试行为