Example usage for org.hibernate.engine.spi QueryParameters hasRowSelection

List of usage examples for org.hibernate.engine.spi QueryParameters hasRowSelection

Introduction

In this page you can find the example usage for org.hibernate.engine.spi QueryParameters hasRowSelection.

Prototype

@SuppressWarnings({ "UnusedDeclaration" })
    public boolean hasRowSelection() 

Source Link

Usage

From source file:com.blazebit.persistence.integration.hibernate.base.HibernateExtendedQuerySupport.java

License:Apache License

private QueryParamEntry createQueryParameters(EntityManager em, List<Query> participatingQueries,
        List<String> queryStrings, Set<String> querySpaces) {
    List<ParameterSpecification> parameterSpecifications = new ArrayList<ParameterSpecification>();

    List<Type> types = new ArrayList<Type>();
    List<Object> values = new ArrayList<Object>();
    Map<String, TypedValue> namedParams = new LinkedHashMap<String, TypedValue>();
    Serializable collectionKey = null;
    LockOptions lockOptions = new LockOptions();
    RowSelection rowSelection = new RowSelection();
    boolean readOnly = false; // TODO: readonly?
    boolean cacheable = false; // TODO: cacheable?
    String cacheRegion = null;/*from   w  w  w.j  a v a2s  .c o  m*/
    String comment = null;
    List<String> queryHints = null;

    for (QueryParamEntry queryParamEntry : getQueryParamEntries(em, participatingQueries, querySpaces)) {
        queryStrings.add(queryParamEntry.queryString);

        QueryParameters participatingQueryParameters = queryParamEntry.queryParameters;
        // Merge parameters
        Collections.addAll(types, participatingQueryParameters.getPositionalParameterTypes());
        Collections.addAll(values, participatingQueryParameters.getPositionalParameterValues());
        namedParams.putAll(participatingQueryParameters.getNamedParameters());
        parameterSpecifications.addAll(queryParamEntry.specifications);

        // Merge row selections
        if (participatingQueryParameters.hasRowSelection()) {
            RowSelection original = queryParamEntry.queryParameters.getRowSelection();
            // Check for defaults

            /***************************************************************************
             * TODO: Either we do it like this, or let these values be passed in separately
             **************************************************************************/

            if (rowSelection.getFirstRow() == null || rowSelection.getFirstRow() < 1) {
                rowSelection.setFirstRow(original.getFirstRow());
            } else if (original.getFirstRow() != null && original.getFirstRow() > 0
                    && !original.getFirstRow().equals(rowSelection.getFirstRow())) {
                throw new IllegalStateException("Multiple row selections not allowed!");
            }
            if (rowSelection.getMaxRows() == null || rowSelection.getMaxRows() == Integer.MAX_VALUE) {
                rowSelection.setMaxRows(original.getMaxRows());
            } else if (original.getMaxRows() != null && original.getMaxRows() != Integer.MAX_VALUE
                    && !original.getMaxRows().equals(rowSelection.getMaxRows())) {
                throw new IllegalStateException("Multiple row selections not allowed!");
            }

            if (rowSelection.getFetchSize() == null) {
                rowSelection.setFetchSize(original.getFetchSize());
            } else if (original.getFetchSize() != null
                    && !original.getFetchSize().equals(rowSelection.getFetchSize())) {
                throw new IllegalStateException("Multiple row selections not allowed!");
            }
            if (rowSelection.getTimeout() == null) {
                rowSelection.setTimeout(original.getTimeout());
            } else if (original.getTimeout() != null
                    && !original.getTimeout().equals(rowSelection.getTimeout())) {
                throw new IllegalStateException("Multiple row selections not allowed!");
            }
        }

        // Merge lock options
        LockOptions originalLockOptions = participatingQueryParameters.getLockOptions();
        if (originalLockOptions.getScope()) {
            lockOptions.setScope(true);
        }
        if (originalLockOptions.getLockMode() != LockMode.NONE) {
            if (lockOptions.getLockMode() != LockMode.NONE
                    && lockOptions.getLockMode() != originalLockOptions.getLockMode()) {
                throw new IllegalStateException("Multiple different lock modes!");
            }
            lockOptions.setLockMode(originalLockOptions.getLockMode());
        }
        if (originalLockOptions.getTimeOut() != -1) {
            if (lockOptions.getTimeOut() != -1
                    && lockOptions.getTimeOut() != originalLockOptions.getTimeOut()) {
                throw new IllegalStateException("Multiple different lock timeouts!");
            }
            lockOptions.setTimeOut(originalLockOptions.getTimeOut());
        }
        @SuppressWarnings("unchecked")
        Iterator<Map.Entry<String, LockMode>> aliasLockIter = participatingQueryParameters.getLockOptions()
                .getAliasLockIterator();
        while (aliasLockIter.hasNext()) {
            Map.Entry<String, LockMode> entry = aliasLockIter.next();
            lockOptions.setAliasSpecificLockMode(entry.getKey(), entry.getValue());
        }
    }

    QueryParameters queryParameters = hibernateAccess.createQueryParameters(
            types.toArray(new Type[types.size()]), values.toArray(new Object[values.size()]), namedParams,
            lockOptions, rowSelection, true, readOnly, cacheable, cacheRegion, comment, queryHints,
            collectionKey == null ? null : new Serializable[] { collectionKey });

    return new QueryParamEntry(null, queryParameters, parameterSpecifications);
}