gpt4 book ai didi

java - Hibernate + Oracle IN 子句限制,如何解决?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:57 26 4
gpt4 key购买 nike

我知道这个问题已经发过很多次了,但是我想问一下细节,

使用 Oracle,您不能向 IN 子句传递超过 1000 个参数,因此将 hibernate 与 oracle 一起使用可能有一些解决此问题的方法,例如:

1-对于每1000个参数列表,在IN子句之间使用OR子句,但是由于oracle对整个查询参数不超过2000的其他限制,这不适用

2-使用for循环,每次查询1000个参数列表,然后追加所有结果,如果需要排序,或者使用不同级别修改的criteria api,这不太好

3- 将参数列表放在一个临时物理表中,然后加入它,甚至在子条件中使用它,这个解决方案我不能尝试,因为我不知道如何使用创建临时表 hibernate ,然后使用它,

因此,如果使用 CRITERIA api 有任何其他想法,请分享,或者即使有一种简单的方法来处理解决方案编号“3”

问候,

最佳答案

首先,您需要向查询传递超过 2000 个 ID(根据您的第一点判断)这一事实本身就是一个警钟。也许有更好的方法来解决根本问题。

您可以使用方法 #2 对每个列表进行排序,然后在应用程序中执行合并排序。这将需要额外的代码,但可能(假设实际查询相对较快)比方法 3 表现得更好。

对于#3,处理临时表有两大缺点:

  • 虽然 Hibernate 确实支持它们(查看 Table.sqlTemporaryTableCreateString 方法,它在 Dialect 类中使用了一堆支持方法),但它们在内部使用并且将需要您进行额外的编码才能从应用程序访问。
  • 更重要的是,使用临时表将迫使您将查询编写为 native SQL(因为它不会被映射)。如果您使用 Criteria API,则必须将 sqlRestriction 与子查询一起使用。

关于java - Hibernate + Oracle IN 子句限制,如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7758198/

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