public QueryParameters getQueryParameters() { LockOptions lockOptions = new LockOptions(); RowSelection selection = new RowSelection(); selection.setFirstRow(rootCriteria.getFirstResult()); selection.setMaxRows(rootCriteria.getMaxResults()); selection.setTimeout(rootCriteria.getTimeout()); selection.setFetchSize(rootCriteria.getFetchSize()); final Map<String, LockMode> lockModeMap = rootCriteria.getLockModes(); for (final String key : lockModeMap.keySet()) { final Criteria subcriteria = getAliasedCriteria(key); lockOptions.setAliasSpecificLockMode(getSQLAlias(subcriteria), lockModeMap.get(key)); } final List<Object> values = new ArrayList<Object>(); final List<Type> types = new ArrayList<Type>(); final Iterator<CriteriaImpl.Subcriteria> subcriteriaIterator = rootCriteria.iterateSubcriteria(); while (subcriteriaIterator.hasNext()) { CriteriaImpl.Subcriteria subcriteria = subcriteriaIterator.next(); LockMode lm = subcriteria.getLockMode(); if (lm != null) { lockOptions.setAliasSpecificLockMode(getSQLAlias(subcriteria), lm); } if (subcriteria.getWithClause() != null) { TypedValue[] tv = subcriteria.getWithClause().getTypedValues(subcriteria, this); for (TypedValue aTv : tv) { values.add(aTv.getValue()); types.add(aTv.getType()); } } } // Type and value gathering for the WHERE clause needs to come AFTER lock mode gathering, // because the lock mode gathering loop now contains join clauses which can contain // parameter bindings (as in the HQL WITH clause). Iterator<CriteriaImpl.CriterionEntry> iter = rootCriteria.iterateExpressionEntries(); while (iter.hasNext()) { CriteriaImpl.CriterionEntry ce = iter.next(); TypedValue[] tv = ce.getCriterion().getTypedValues(ce.getCriteria(), this); for (TypedValue aTv : tv) { values.add(aTv.getValue()); types.add(aTv.getType()); } } Object[] valueArray = values.toArray(); Type[] typeArray = ArrayHelper.toTypeArray(types); return new QueryParameters( typeArray, valueArray, lockOptions, selection, rootCriteria.isReadOnlyInitialized(), (rootCriteria.isReadOnlyInitialized() && rootCriteria.isReadOnly()), rootCriteria.getCacheable(), rootCriteria.getCacheRegion(), rootCriteria.getComment(), rootCriteria.getQueryHints(), rootCriteria.isLookupByNaturalKey(), rootCriteria.getResultTransformer()); }
public String getWhereCondition() { StringBuilder condition = new StringBuilder(30); Iterator<CriteriaImpl.CriterionEntry> criterionIterator = rootCriteria.iterateExpressionEntries(); while (criterionIterator.hasNext()) { CriteriaImpl.CriterionEntry entry = criterionIterator.next(); String sqlString = entry.getCriterion().toSqlString(entry.getCriteria(), this); condition.append(sqlString); if (criterionIterator.hasNext()) { condition.append(" and "); } } return condition.toString(); }