gpt4 book ai didi

java - JPA/Hibernate 似乎将带有 in 子句的查询转换为带有 = 子句的多个查询

转载 作者:搜寻专家 更新时间:2023-10-31 20:31:33 25 4
gpt4 key购买 nike

我们实现的解决方案是为了在合理的时间内收集大量重对象并且没有内存溢出(我说的是具有多个 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();

最佳答案

您好,您应该使用 setParameterList而不是 setParameter。如果你想获得完整的实体对象,也不需要在 hibernate 中使用 select

 Query q = this.getContext().createQuery("from A a where a.id in (:ids)");
q.setParameterList("ids", idList);
return (List<A>) q.getResultList();

关于java - JPA/Hibernate 似乎将带有 in 子句的查询转换为带有 = 子句的多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com