in grails-datastore-gorm-hibernate/src/main/groovy/org/grails/orm/hibernate/query/GrailsHibernateQueryUtils.java [44:122]
public static void populateArgumentsForCriteria(PersistentEntity entity, Criteria c, Map argMap, ConversionService conversionService, boolean useDefaultMapping) {
Integer maxParam = null;
Integer offsetParam = null;
if (argMap.containsKey(DynamicFinder.ARGUMENT_MAX)) {
maxParam = conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_MAX), Integer.class);
}
if (argMap.containsKey(DynamicFinder.ARGUMENT_OFFSET)) {
offsetParam = conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_OFFSET), Integer.class);
}
if (argMap.containsKey(DynamicFinder.ARGUMENT_FETCH_SIZE)) {
c.setFetchSize(conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_FETCH_SIZE), Integer.class));
}
if (argMap.containsKey(DynamicFinder.ARGUMENT_TIMEOUT)) {
c.setTimeout(conversionService.convert(argMap.get(DynamicFinder.ARGUMENT_TIMEOUT), Integer.class));
}
if (argMap.containsKey(DynamicFinder.ARGUMENT_FLUSH_MODE)) {
c.setFlushMode(convertFlushMode(argMap.get(DynamicFinder.ARGUMENT_FLUSH_MODE)));
}
if (argMap.containsKey(DynamicFinder.ARGUMENT_READ_ONLY)) {
c.setReadOnly(ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_READ_ONLY, argMap));
}
String orderParam = (String) argMap.get(DynamicFinder.ARGUMENT_ORDER);
Object fetchObj = argMap.get(DynamicFinder.ARGUMENT_FETCH);
if (fetchObj instanceof Map) {
Map fetch = (Map) fetchObj;
for (Object o : fetch.keySet()) {
String associationName = (String) o;
c.setFetchMode(associationName, getFetchMode(fetch.get(associationName)));
}
}
final int max = maxParam == null ? -1 : maxParam;
final int offset = offsetParam == null ? -1 : offsetParam;
if (max > -1) {
c.setMaxResults(max);
}
if (offset > -1) {
c.setFirstResult(offset);
}
if (ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_LOCK, argMap)) {
c.setLockMode(LockMode.PESSIMISTIC_WRITE);
c.setCacheable(false);
} else {
if (argMap.containsKey(DynamicFinder.ARGUMENT_CACHE)) {
c.setCacheable(ClassUtils.getBooleanFromMap(DynamicFinder.ARGUMENT_CACHE, argMap));
} else {
cacheCriteriaByMapping(entity.getJavaClass(), c);
}
}
final Object sortObj = argMap.get(DynamicFinder.ARGUMENT_SORT);
if (sortObj != null) {
boolean ignoreCase = true;
Object caseArg = argMap.get(DynamicFinder.ARGUMENT_IGNORE_CASE);
if (caseArg instanceof Boolean) {
ignoreCase = (Boolean) caseArg;
}
if (sortObj instanceof Map) {
Map sortMap = (Map) sortObj;
for (Object sort : sortMap.keySet()) {
final String order = DynamicFinder.ORDER_DESC.equalsIgnoreCase((String) sortMap.get(sort)) ? DynamicFinder.ORDER_DESC : DynamicFinder.ORDER_ASC;
addOrderPossiblyNested(c, entity, (String) sort, order, ignoreCase);
}
} else {
final String sort = (String) sortObj;
final String order = DynamicFinder.ORDER_DESC.equalsIgnoreCase(orderParam) ? DynamicFinder.ORDER_DESC : DynamicFinder.ORDER_ASC;
addOrderPossiblyNested(c, entity, sort, order, ignoreCase);
}
} else if (useDefaultMapping) {
Mapping m = AbstractGrailsDomainBinder.getMapping(entity.getJavaClass());
if (m != null) {
Map sortMap = m.getSort().getNamesAndDirections();
for (Object sort : sortMap.keySet()) {
final String order = DynamicFinder.ORDER_DESC.equalsIgnoreCase((String) sortMap.get(sort)) ? DynamicFinder.ORDER_DESC : DynamicFinder.ORDER_ASC;
addOrderPossiblyNested(c, entity, (String) sort, order, true);
}
}
}
}