Java Oracle 异常 - “列表中的最大表达式数为 1000”

2022-09-02 20:04:46

我正在将字符串列表传递给我的查询(编写的SQL查询)以获取所需的数据。但是我得到这个例外:

ora-01795 列表中表达式的最大数量为 1000

我检查了列表中传递给查询 IN 参数的条目是否超过 1000 个。


答案 1

这是在查询中传递列表次数的预言机限制。

  1. 你将不得不砍你的查询或
  2. 改为在 IN 子句中提供子查询/联接。

答案 2

如果您使用的是 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);
  }

推荐