java - Hibernate Criterion IN Clause 1000 分手

标签 java hibernate database-performance

你好,我有一个大型的 oracle hibernate web 应用程序,它似乎给出了这个错误

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

我需要一个 java 代码作为 hibernate 用户定义的组件进行测试,以尽可能简单地添加到我在屏幕上搜索的 java 类,有人可以拥有这样经过测试的组件吗?

最佳答案

我尝试了下面来自 link 的代码它似乎工作得很好我会粘贴代码以防将来链接断开。

保持简单保持微笑:)

    /**
    * 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;
    }
}

关于java - Hibernate Criterion IN Clause 1000 分手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14869054/

相关文章:

java - 无法将 TextField 添加到 Java 中的界面

java - Hibernate:指定父实体 <join/> 中的哪一列应使用

java - Hibernate 问题 java.lang.Boolean 无法转换为 java.lang.String 使用 JDK 1.7

postgresql - 在不损失性能的情况下同时执行多个功能

sql - 参数化 SQL 的性能

mysql - 提高多个字段的多行的总和性能?

Java Canvas repaint() 闪烁

java - JMS消息ID是否代表JMS服务器接收消息的顺序?消息的订单传递

java - Powermock:java.lang.ClassCastException

java - JPA 中的 CascadeType.REMOVE 和 orphanRemoval 有什么区别?