spring-data-jpa使用oracle作为数据源时in查询在1000条以上 ,报ORA_01795的错误
原文连接: https://segmentfault.com/a/1190000041913304?sort=votes
目的
解决项目中使用spring-data-jpa
,采用oracle 11g
作为数据源时,当in
查询后面的条件超过1000条后,oracle
报ORA_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(?, ?));