gpt4 book ai didi

java - Spring Data Repository 动态查找器 Oracle In 子句最大 1000

转载 作者:IT老高 更新时间:2023-10-28 13:49:18 24 4
gpt4 key购买 nike

我想知道是否有一种机制可以将 1000 多个项目的集合处理到 SQL IN 子句的 Spring 存储库中。现在,我们在将项目列表传递到存储库之前对其进行拆分,但是如果驱动程序或 spring 知道 Oracle 的限制并为我们做这件事会很好。

最佳答案

解决 IN 限制是低效的,Spring Data 并不总是适合这项工作的工具。考虑以下几点:

  1. 数以千计的绑定(bind)值可能会产生数兆字节的 SQL。将此 SQL 发送到数据库需要很长时间。数据库读取 SQL 文本可能比按照 Tom's answer to "Limit and conversion very long IN list: WHERE x IN ( ,,, ...)" question 执行它需要更长的时间。 .

  2. 会因为SQL解析而效率低下。不仅解析这个长 SQL 需要很长时间,而且每次调用都有不同数量的绑定(bind)参数,这些参数将被单独解析和计划(参见 this article which explains it)。

  3. SQL 语句中的绑定(bind)参数有硬性限制。您可以重复 OR 几次以解决 IN 限制,但您将在某个时候达到 SQL 语句限制。

对于这些类型的查询,通常最好创建 temporary tables .在查询之前创建一个,将所有标识符插入其中,并将其与查询中的实体表连接起来,以模拟 IN 条件。

理想情况下,您可以将 JPA 替换为存储过程,尤其是当您从数据库中提取数以万计的标识符只是为了在下一个查询中将它们传回数据库时。

关于java - Spring Data Repository 动态查找器 Oracle In 子句最大 1000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35365014/

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