Monday, 7 September 2015

How to pass more than 1000 parameters to in query in hibernate

How to pass the more than 1000 parameters to the sql in query
    // It should not changed. Criteria allows 1000 records for the "in" method.
    private static final Integer SUPPORTED_IN_PARAMETER_ARGUMENTS = 1000;
    private static final String SPACE = " ";
    private static final String AND = " and ";
    private static final String OR = " or ";
    private static final String OPEN_BRACE = " ( ";
    private static final String CLOSE_BRACE = " ) ";
    private static final String IN = " in ";

Criteria

    public static final void addParametersToCriteriaInMethod(Criteria criteria, Collection<?> collection, String property)
    {
        if (criteria != null && collection != null && property != null)
        {
            // new Array List object requires for operations, "Arrays.asList' dosen't give the new list it gives
            // the java.util.Arrays$ArrayList, on this object we can't do any operations
            List<Object> listOfParameters = new ArrayList<Object>(Arrays.asList(collection.toArray()));
            Disjunction orCondiation = Restrictions.disjunction();
            if (listOfParameters.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
            {
                while (listOfParameters.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
                {
                    orCondiation.add(Restrictions.in(property, listOfParameters.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS)));
                    listOfParameters.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS).clear();
                }
            }
            orCondiation.add(Restrictions.in(property, listOfParameters));
            criteria.add(orCondiation);
        }
        else
        {
            throw new IllegalArgumentException("One of the passed parameters was null");
        }
    }

Detached Criteria

public static final void addParametersToCriteriaInMethod(DetachedCriteria criteria, Collection<?> collection, String property)
    {
        if (criteria != null && collection != null && property != null)
        {
            // new Array List object requires for operations, "Arrays.asList' dosen't give the new list it gives
            // the java.util.Arrays$ArrayList, on this object we can't do any operations
            List<Object> listOfParameters = new ArrayList<Object>(Arrays.asList(collection.toArray()));
            Disjunction orCondiation = Restrictions.disjunction();
            if (listOfParameters.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
            {
                while (listOfParameters.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
                {
                    orCondiation.add(Restrictions.in(property, listOfParameters.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS)));
                    listOfParameters.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS).clear();
                }
            }
            orCondiation.add(Restrictions.in(property, listOfParameters));
            criteria.add(orCondiation);
        }
        else
        {
            throw new IllegalArgumentException("One of the passed parameters was null");
        }
    }

HQL

public static final String addParametersToHQLInMethod(String query, Collection<?> collection, String property, Boolean addAnd)
    {
        StringBuilder sb = new StringBuilder(query);
        List<Object> l = new ArrayList<Object>(Arrays.asList(collection.toArray()));

        if (addAnd)
        {
            sb.append(AND);
        }
        sb.append(OPEN_BRACE);
        if (l.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
        {
            while (l.size() > SUPPORTED_IN_PARAMETER_ARGUMENTS)
            {
                sb.append(SPACE + property + IN + l.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS) + OR);

                l.subList(0, SUPPORTED_IN_PARAMETER_ARGUMENTS).clear();
            }
        }
        sb.append(SPACE + property + IN + l + CLOSE_BRACE);

        return sb.toString().replace("[", OPEN_BRACE).replace("]", CLOSE_BRACE);
    }


No comments:

Post a Comment