【发布时间】:2017-02-14 19:42:48
【问题描述】:
实体关系:事务(@ManyToOne - 默认为渴望)-> 帐户
String sql = "SELECT new com.test.Pojo(t.account, SUM(t.value)) FROM Transaction t GROUP BY t.account";
List list = entityManager.createQuery(sql).getResultList();
默认情况下,使用 Hibernate 实现的 JPA 将生成 1 + n 个查询。这 n 个查询用于延迟加载帐户实体。
我怎样才能使这个查询急切并用一个查询加载所有内容? sql 等价物类似于
SELECT account.*, SUM(t.value) FROM transactions JOIN accounts on transactions.account_id = accounts.id GROUP BY account.id
,一种在 PostgreSQL 上运行良好的语法。根据我的发现,Hibernate 正在生成一个查询来证明延迟加载是合理的。
SELECT account.id, SUM(t.value) FROM transactions JOIN accounts on transactions.account_id = accounts.id GROUP BY account.id
【问题讨论】:
-
我必须在 hibernate 实现中访问 HQLQueryPlan.java,以防有人想进入兔子洞。它会在执行前清理 HQL。
-
您是否尝试过使用 @BatchSize 注释 Account 实体本身? (抱歉,我现在没有时间亲自尝试一下,看看是否真的有帮助)
-
请贴出相关映射。
-
映射与结果无关。 @ManyToOne 交易 -> 账户
标签: postgresql hibernate jpa hql jpql