首页 > 数据库 >spring-data-jpa使用oracle作为数据源时in查询在1000条以上 ,报ORA_01795的错误

spring-data-jpa使用oracle作为数据源时in查询在1000条以上 ,报ORA_01795的错误

时间:2023-03-23 18:55:18浏览次数:62  
标签:String jpa 数据源 transformedInExpression spring sql import append 1000

spring-data-jpa使用oracle作为数据源时in查询在1000条以上 ,报ORA_01795的错误
https://segmentfault.com/a/1190000041913304?sort=votes

目的

解决项目中使用spring-data-jpa,采用oracle 11g作为数据源时,当in查询后面的条件超过1000条后,oracleORA_01795的异常。

思路

问题在于当前版本的oracle不支持单个in查询超过1000的情形,思路是通过jpa提供给我们的有实体类生成SQL后、未执行前的拦截器,对生成的SQL进行判断,如果存在上述的超过1000的情形,将SQL拆分成多个in的组合、通过or连接。
例如:

# jpa转换的SQL通常是如下形式,假如in (?,?,?....)有超过1000个?
select id,name,gender from user where id in(? ,? ,? ,? ,? ,? ,? ,? ,? ,?, ?);
# 将其拆分
select id,name,gender from user where (id in(? ,? ,? ,? ,? ,?) or id in (,? ,? ,?)  or id in(?, ?));

代码

标签:String,jpa,数据源,transformedInExpression,spring,sql,import,append,1000
From: https://www.cnblogs.com/sunny3158/p/17248528.html

相关文章

  • SpringMVC拦截器
    当存在多个Interceptor时,拦截顺序是根据spring-mvc.xml中的拦截器配置顺序来的:  拦截器中定义的三个方法:preHandle(req,res,obj):在目标方法执行前执行postHandle(......
  • Redis在springboot的应用场景
    场景一:出入库存量——分布锁 锁是共享的Callable回调返回结果会抛出异常。Runable不会抛出异常k打进去==能获取到锁自定义线程mysql并发超过2000就会跟慢,要把压力传......
  • Spring Cloud Config 本地配置覆盖远程配置
    SpringCloudConfig配置的优先级远程配置>本地配置>java代码配置当需要本地配置优先时,可以限制远程配置的优先级配置spring:cloud:config:allow-......
  • Spring 管理Bean-IOC
    1.Spring配置/管理bean介绍1.1Bean管理包括两方面创建bean对象给bean注入属性1.2Bean配置方式基于xml文件配置方式基于注解方式......
  • SpringBoot整合第三方技术
    整合JUnit名称:@SpringBootTest类型:测试类注解位置:测试类定义上方作用:设置JUnit加载的SpringBoot启动类范例:@SpringBootTest(classes=Springboot07JunitApplication.cl......
  • Spring Boot 中的 AOP,到底是 JDK 动态代理还是 Cglib 动态代理?
    好啦,开始今天的正文。大家都知道,AOP底层是动态代理,而Java中的动态代理有两种实现方式:基于JDK的动态代理基于Cglib的动态代理这两者最大的区别在于基于JDK的......
  • Web请求与响应(SpringBoot)
    Web请求与响应 Web的工作原理可以分为以下几个步骤:输入URL:Web客户端使用Web浏览器输入所需访问的URL(统一资源定位符)。建立连接:Web浏览器与Web服务器之间建立TCP/......
  • SpringBoot详解
    一、介绍1.SpringBoot是一个基于Spring框架的开源框架,用于构建微服务和Web应用程序。它可以帮助开发者轻松创建独立的、基于Spring的应用程序,并在较短的时间内完......
  • spring ldap 使用总结
    1.报错1.1 org.springframework.ldap.PartialResultException:UnprocessedContinuationReference(s);nestedexceptionisjavax.naming.PartialResultException:......
  • 宝塔在docker环境下 部署spring boot乱码
    1.docker在linux下面启动的时候,默认编码是POSIX通过locale可以查看具体的编码   那么我们可以设置,需要在容器中vi/root/.bashrc设置环境变量:exportLANG=en_US.......