代码之家  ›  专栏  ›  技术社区  ›  paweloque

Oracle,其中限制为1000/休眠

  •  6
  • paweloque  · 技术社区  · 15 年前

    Oracle知道在 where a in (..) 条款。在与Oracle结合使用Hibernate时,是否也存在这种限制?

    4 回复  |  直到 15 年前
        1
  •  4
  •   Tendayi Mawushe    15 年前

    此数据库限制在Hibernate中仍然存在。如果您的in子句中确实需要1000个以上的项,那么您必须自己在代码中拆分列表,并为每个1000个键的块运行查询,然后将结果集附加在一起。

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

        2
  •  3
  •   axel22    13 年前

    我们有同样的问题,并通过将它分成100个第条中的包来解决它。

    select * from mytable where id in (...) or id in (...).
    

    评论:

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

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

    其他优化:

    • 不用-1,只需再次使用最后一个真值。那甚至更好一点。

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

    注:我们在条款中用各种固定数量的元素进行了测试,观察到超过100种元素的性能下降。

        3
  •  2
  •   mmmmmm    15 年前

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

    Hibernate对in的数据没有什么特别的作用-只是将其传递到数据库

        4
  •  1
  •   Christian    14 年前