【发布时间】:2019-08-23 23:47:19
【问题描述】:
我们实施的一个解决方案是为了在合理的时间内收集大量重型对象并且没有内存溢出(我说的是具有多个 fetchType.eager 关系的对象,以及本身具有急切获取关系的实体),是首先选择那些对象的id,然后根据这些id选择对象本身。
到了优化我们代码的时候,我们注意到(使用hibernate.show_sql=true)我们用来收集这些对象的查询(select a from A a where a.id in :ids)被JPA/Hibernate 翻译成数千个select a from ...endless join list... where a.id = ?形式的查询
问题如下:
为什么 JPA/Hibernate 将我们带有“in”子句的初始查询转换成这么多带有“=”子句的查询。不是效率低吗?如果是这样,有没有办法防止这种情况发生?
以下是我们的代码中调用查询的方式:
Query q = this.getContext().createQuery("select a from A a where a.id in :ids");
q.setParameter("ids", idList);
return (List<A>) q.getResultList();
【问题讨论】:
-
你的休眠版本是什么?
-
hibernate_core 版本为 5.2.12。
标签: java oracle performance jpa