Java Oracle 异常 - “列表中的最大表达式数为 1000”
我正在将字符串列表传递给我的查询(编写的SQL查询)以获取所需的数据。但是我得到这个例外:
ora-01795 列表中表达式的最大数量为 1000
我检查了列表中传递给查询 IN 参数的条目是否超过 1000 个。
我正在将字符串列表传递给我的查询(编写的SQL查询)以获取所需的数据。但是我得到这个例外:
ora-01795 列表中表达式的最大数量为 1000
我检查了列表中传递给查询 IN 参数的条目是否超过 1000 个。
这是在查询中传递列表次数的预言机限制。
如果您使用的是 Oracle DB,则不能在单个“where”条件下拥有包含 1000 个以上元素的列表。因此,您可以在多个“where”条件中切下“where”条件,并用“or”子句连接它们。
如果您使用的是休眠条件,则可以使用下面的 Java 方法来执行此操作。只需将代码替换到您使用过的地方
criteria.add(Restrictions.in(propertyName, mainList));
跟
addCriteriaIn(propertyName, mainList, criteria);
其方法是:
private void addCriteriaIn (String propertyName, List<?> list,Criteria criteria)
{
Disjunction or = Restrictions.disjunction();
if(list.size()>1000)
{
while(list.size()>1000)
{
List<?> subList = list.subList(0, 1000);
or.add(Restrictions.in(propertyName, subList));
list.subList(0, 1000).clear();
}
}
or.add(Restrictions.in(propertyName, list));
criteria.add(or);
}