sunny123456

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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(?, ?));

代码

posted on 2023-03-23 18:49  sunny123456  阅读(212)  评论(0编辑  收藏  举报