Вы не можете иметь список с более чем 1000 элементами в одном условии «где», если вы работаете с БД Oracle. Таким образом, вы можете разбить ваше условие «где» в нескольких «где» условиях и соединить их с помощью «или».
Если вы используете Критерии гибернации, вы можете использовать приведенный ниже метод 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);
}