嗨,我有这个大型的Oracle休眠Web应用程序,它似乎给出了此错误
ORA-01795: maximum number of expressions in a list is 1000
并且我需要由某人测试的Java代码作为休眠用户定义的组件,以便尽可能容易地将其添加到屏幕上的搜索Java类中,有人可以拥有经过测试的组件吗?
我尝试从链接下面的代码,它似乎工作得很好,万一将来链接被打破,我会粘贴代码。
保持简单,保持微笑:)
/** * An utility method to build the Criterion Query IN clause if the number of parameter * values passed has a size more than 1000. Oracle does not allow more than * 1000 parameter values in a IN clause. Doing so a {@link SQLException} is * thrown with error code, 'ORA-01795: maximum number of expressions in a list is 1000'. * @param propertyName * @param values * @return */ import java.util.List; import org.hibernate.criterion.Restrictions; /** * * @author 2796 */ public class SplitHibernateIn { private static int PARAMETER_LIMIT = 999; public static org.hibernate.criterion.Criterion buildInCriterion(String propertyName, List values) { org.hibernate.criterion.Criterion criterion = null; int listSize = values.size(); for (int i = 0; i < listSize; i += PARAMETER_LIMIT) { List subList; if (listSize > i + PARAMETER_LIMIT) { subList = values.subList(i, (i + PARAMETER_LIMIT)); } else { subList = values.subList(i, listSize); } if (criterion != null) { criterion = Restrictions.or(criterion, Restrictions.in(propertyName, subList)); } else { criterion = Restrictions.in(propertyName, subList); } } return criterion; } }