Java 将NamedParameterJdbcTemplate.query与元组一起使用时,32766条记录后的关系运算符无效

Java 将NamedParameterJdbcTemplate.query与元组一起使用时,32766条记录后的关系运算符无效,java,spring,oracle,syntax-error,jdbctemplate,Java,Spring,Oracle,Syntax Error,Jdbctemplate,我正在尝试使用IN子句执行以下查询,并使用NamedParameterJdbcTemplate.query方法传递编号为32767或更多的元组。但是,我得到了以下错误: In DataAccessException:PreparedStatementCallback; bad SQL grammar [SELECT ID, STATUS FROM ID_DETAILS WHERE (ID, 1) IN ((?, ?), (?, ?), (?, ?), (?, ?)..32767 times)

我正在尝试使用IN子句执行以下查询,并使用NamedParameterJdbcTemplate.query方法传递编号为32767或更多的元组。但是,我得到了以下错误:

In DataAccessException:PreparedStatementCallback; bad SQL grammar [SELECT ID, STATUS FROM ID_DETAILS WHERE (ID, 1) IN ((?, ?), (?, ?), (?, ?), (?, ?)..32767 times)  ORDER BY ID, EL_SEQ ASC]; nested exception is java.sql.SQLSyntaxErrorException: ORA-00920: invalid relational operator
当传递的ID数小于或等于32766时,不会引发此错误。在这方面有人能帮忙吗

以下是使用的代码:

List<Object[]> ids = getToupleOf(idList); //idList has 32767 or more Long values
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("IDLIST", ids);
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new 
NamedParameterJdbcTemplate(
    getJdbcTemplate().getDataSource());

return namedParameterJdbcTemplate.query(SQLConstants.REFRESH_QUERY, 
                                         parameters,
       new ResultSetExtractor<List<ResponseVO>>() {
        @Override
        public List<ResponseVO> extractData(ResultSet rs)
                throws SQLException, DataAccessException {
            List<ResponseVO> retList = new LinkedList<ResponseVO>();
            while (rs.next()) {
                ResponseVO eachResponse = constructResponseVOFromRS(rs);
                retList.add(eachResponse);
            }
            return retList;
        }
    });

您知道队列中的参数数量是有限制的吗?我可以知道哪个队列有限制吗?这取决于您使用的数据库及其配置。通常限制在1000左右。我们正在使用Oracle,我在第条中知道1000的限制。因此,我们使用元组。限制是在总数上,无论您如何使用它们,我注意到您有
(ID,1)
,以前从未见过这一点。您确定此处允许
1
private List<Object[]> getToupleOf(List<Long> idSet){
    List<Object[]> list = new LinkedList<Object[]>();

    idSet.forEach(l->{
        Object[] touple = new Object[2];
        touple[0] = l.longValue();
        touple[1] = 1;
        list.add(touple);
    });

    return list;

}
public static final String REFRESH_QUERY = "SELECT ID, STATUS FROM ID_DETAILS WHERE (ID, 1) IN (:IDLIST) ORDER BY ID, EL_SEQ ASC";