oracle在哪里限制为1000 / hibernate

时间:2009-11-04 12:35:42

标签: oracle hibernate where

Oracle知道where a in (..)子句中对1000个元素的限制。将Hibernate与Oracle结合使用时是否也存在此限制?

4 个答案:

答案 0 :(得分:4)

这个数据库限制仍然存在于hibernate中。如果你的in子句中确实需要超过1000个项目,则必须在代码中自己拆分列表,并为每个1000个键块运行查询,然后将结果集附加在一起。

请注意,如果您的查询需要排序或以其他方式聚合查询结果,则此hack会崩溃,因为只有代码中才会知道完整的结果集。在这种情况下,您最好找到另一种方法来编写不需要IN子句的查询。

答案 1 :(得分:3)

我们遇到了同样的问题,并通过将其拆分为100个IN子句包

来解决它
select * from mytable where id in (...) or id in (...).

说明:

  • 确保使用绑定变量
  • 确保查询始终看起来一样。这是通过用-1填充IN子句来完成的,直到你有100个元素
  • 尝试在(...)中始终使用相同数量的ORed,以便查询始终看起来相同

为什么你想要上述要点?这样查询优化器就可以重用查询计划。

其他优化:

  • 而不是使用-1,您可以再次使用最后一个真值。那甚至更好一点。

示例:in(1,2,3,4,4,...,4)

另请注意:我们使用in子句中的各种固定数量的元素进行了测试,观察到的性能下降超过100个元素。

答案 2 :(得分:2)

是的,因为Hibernate会在某个阶段调用Oracle,所以限制是Hibernate和Oracle中限制的最低限度

Hibernate对于in的数据没什么特别的 - 只是将它传递给数据库

答案 3 :(得分:1)