in grails-datastore-core/src/main/groovy/org/grails/datastore/mapping/query/jpa/JpaQueryBuilder.java [263:736]
static {
queryHandlers.put(AssociationQuery.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion,
StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters,
ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
if (!allowJoins) {
throw new InvalidDataAccessResourceUsageException("Joins cannot be used in a DELETE or UPDATE operation");
}
AssociationQuery aq = (AssociationQuery) criterion;
final Association<?> association = aq.getAssociation();
Query.Junction associationCriteria = aq.getCriteria();
List<Query.Criterion> associationCriteriaList = associationCriteria.getCriteria();
return handleAssociationCriteria(q, whereClause, logicalName, position, parameters, conversionService, allowJoins, association, associationCriteria, associationCriteriaList, hibernateCompatible);
}
});
queryHandlers.put(Query.Negation.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion,
StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters,
ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
whereClause.append(NOT_CLAUSE)
.append(OPEN_BRACKET);
final Query.Negation negation = (Query.Negation)criterion;
position = buildWhereClauseForCriterion(entity, negation, q, whereClause, logicalName, negation.getCriteria(), position, parameters, conversionService, allowJoins, hibernateCompatible);
whereClause.append(CLOSE_BRACKET);
return position;
}
});
queryHandlers.put(Query.Conjunction.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion,
StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters,
ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
whereClause.append(OPEN_BRACKET);
final Query.Conjunction conjunction = (Query.Conjunction)criterion;
position = buildWhereClauseForCriterion(entity, conjunction, q, whereClause, logicalName, conjunction.getCriteria(), position, parameters, conversionService, allowJoins, hibernateCompatible);
whereClause.append(CLOSE_BRACKET);
return position;
}
});
queryHandlers.put(Query.Disjunction.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion,
StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters,
ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
whereClause.append(OPEN_BRACKET);
final Query.Disjunction disjunction = (Query.Disjunction)criterion;
position = buildWhereClauseForCriterion(entity, disjunction, q,whereClause, logicalName, disjunction.getCriteria(), position, parameters, conversionService, allowJoins, hibernateCompatible);
whereClause.append(CLOSE_BRACKET);
return position;
}
});
queryHandlers.put(Query.Equals.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.Equals eq = (Query.Equals) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.Equals.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, "=", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.EqualsProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.EqualsProperty eq = (Query.EqualsProperty) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.EqualsProperty.class);
validateProperty(entity, otherProperty, Query.EqualsProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, "=");
return position;
}
});
queryHandlers.put(Query.NotEqualsProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.PropertyComparisonCriterion eq = (Query.PropertyComparisonCriterion) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.NotEqualsProperty.class);
validateProperty(entity, otherProperty, Query.NotEqualsProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, "!=");
return position;
}
});
queryHandlers.put(Query.GreaterThanProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.PropertyComparisonCriterion eq = (Query.PropertyComparisonCriterion) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.GreaterThanProperty.class);
validateProperty(entity, otherProperty, Query.GreaterThanProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, ">");
return position;
}
});
queryHandlers.put(Query.GreaterThanEqualsProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.PropertyComparisonCriterion eq = (Query.PropertyComparisonCriterion) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.GreaterThanEqualsProperty.class);
validateProperty(entity, otherProperty, Query.GreaterThanEqualsProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, ">=");
return position;
}
});
queryHandlers.put(Query.LessThanProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.PropertyComparisonCriterion eq = (Query.PropertyComparisonCriterion) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.LessThanProperty.class);
validateProperty(entity, otherProperty, Query.LessThanProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, "<");
return position;
}
});
queryHandlers.put(Query.LessThanEqualsProperty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.PropertyComparisonCriterion eq = (Query.PropertyComparisonCriterion) criterion;
final String propertyName = eq.getProperty();
String otherProperty = eq.getOtherProperty();
validateProperty(entity, propertyName, Query.LessThanEqualsProperty.class);
validateProperty(entity, otherProperty, Query.LessThanEqualsProperty.class);
appendPropertyComparison(whereClause, logicalName, propertyName, otherProperty, "<=");
return position;
}
});
queryHandlers.put(Query.IsNull.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IsNull isNull = (Query.IsNull) criterion;
final String name = isNull.getProperty();
validateProperty(entity, name, Query.IsNull.class);
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IS NULL ");
return position;
}
});
queryHandlers.put(Query.IsNotNull.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IsNotNull isNotNull = (Query.IsNotNull) criterion;
final String name = isNotNull.getProperty();
validateProperty(entity, name, Query.IsNotNull.class);
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IS NOT NULL ");
return position;
}
});
queryHandlers.put(Query.IsEmpty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IsEmpty isEmpty = (Query.IsEmpty) criterion;
final String name = isEmpty.getProperty();
validateProperty(entity, name, Query.IsEmpty.class);
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IS EMPTY ");
return position;
}
});
queryHandlers.put(Query.IsNotEmpty.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IsNotEmpty isNotEmpty = (Query.IsNotEmpty) criterion;
final String name = isNotEmpty.getProperty();
validateProperty(entity, name, Query.IsNotEmpty.class);
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IS EMPTY ");
return position;
}
});
queryHandlers.put(Query.IsNotNull.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IsNotNull isNotNull = (Query.IsNotNull) criterion;
final String name = isNotNull.getProperty();
validateProperty(entity, name, Query.IsNotNull.class);
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IS NOT NULL ");
return position;
}
});
queryHandlers.put(Query.IdEquals.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.IdEquals eq = (Query.IdEquals) criterion;
PersistentProperty prop = entity.getIdentity();
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, prop.getName(), position, "=", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.NotEquals.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.NotEquals eq = (Query.NotEquals) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.NotEquals.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " != ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.GreaterThan.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.GreaterThan eq = (Query.GreaterThan) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.GreaterThan.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " > ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.LessThanEquals.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.LessThanEquals eq = (Query.LessThanEquals) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.LessThanEquals.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " <= ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.GreaterThanEquals.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.GreaterThanEquals eq = (Query.GreaterThanEquals) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.GreaterThanEquals.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " >= ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.Between.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.Between between = (Query.Between) criterion;
final Object from = between.getFrom();
final Object to = between.getTo();
final String name = between.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.Between.class);
Class propType = prop.getType();
final String qualifiedName = logicalName + DOT + name;
whereClause.append(OPEN_BRACKET)
.append(qualifiedName)
.append(" >= ")
.append(PARAMETER_PREFIX)
.append(++position);
whereClause.append(" AND ")
.append(qualifiedName)
.append(" <= ")
.append(PARAMETER_PREFIX)
.append(++position)
.append(CLOSE_BRACKET);
parameters.add(conversionService.convert( from, propType ));
parameters.add(conversionService.convert( to, propType ));
return position;
}
});
queryHandlers.put(Query.LessThan.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.LessThan eq = (Query.LessThan) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.LessThan.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " < ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.Like.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.Like eq = (Query.Like) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.Like.class);
Class propType = prop.getType();
position = appendCriteriaForOperator(whereClause, logicalName, name, position, " like ", hibernateCompatible);
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.ILike.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.ILike eq = (Query.ILike) criterion;
final String name = eq.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.ILike.class);
Class propType = prop.getType();
whereClause.append("lower(")
.append(logicalName)
.append(DOT)
.append(name)
.append(")")
.append(" like lower(")
.append(PARAMETER_PREFIX)
.append(++position)
.append(")");
parameters.add(conversionService.convert( eq.getValue(), propType ));
return position;
}
});
queryHandlers.put(Query.In.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.In inQuery = (Query.In) criterion;
final String name = inQuery.getProperty();
PersistentProperty prop = validateProperty(entity, name, Query.In.class);
Class propType = prop.getType();
whereClause.append(logicalName)
.append(DOT)
.append(name)
.append(" IN (");
QueryableCriteria subquery = inQuery.getSubquery();
if(subquery != null) {
buildSubQuery(q, whereClause, position, parameters, conversionService, allowJoins, hibernateCompatible, subquery);
}
else {
for (Iterator i = inQuery.getValues().iterator(); i.hasNext();) {
Object val = i.next();
whereClause.append(PARAMETER_PREFIX);
whereClause.append(++position);
if (i.hasNext()) {
whereClause.append(COMMA);
}
parameters.add(conversionService.convert(val, propType));
}
}
whereClause.append(CLOSE_BRACKET);
return position;
}
});
queryHandlers.put(Query.NotIn.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.NotIn notIn = (Query.NotIn) criterion;
String comparisonExpression = " NOT IN (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, notIn, comparisonExpression);
}
});
queryHandlers.put(Query.EqualsAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.EqualsAll equalsAll = (Query.EqualsAll) criterion;
String comparisonExpression = " = ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.NotEqualsAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion equalsAll = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " != ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.GreaterThanAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion equalsAll = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " > ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.GreaterThanSome.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion equalsAll = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " > SOME (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.GreaterThanEqualsAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion equalsAll = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " >= ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.GreaterThanEqualsSome.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion equalsAll = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " >= SOME (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, equalsAll, comparisonExpression);
}
});
queryHandlers.put(Query.LessThanAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion subqueryCriterion = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " < ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, subqueryCriterion, comparisonExpression);
}
});
queryHandlers.put(Query.LessThanSome.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion subqueryCriterion = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " < SOME (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, subqueryCriterion, comparisonExpression);
}
});
queryHandlers.put(Query.LessThanEqualsAll.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion subqueryCriterion = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " <= ALL (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, subqueryCriterion, comparisonExpression);
}
});
queryHandlers.put(Query.LessThanEqualsSome.class, new QueryHandler() {
public int handle(PersistentEntity entity, Query.Criterion criterion, StringBuilder q, StringBuilder whereClause, String logicalName, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible) {
Query.SubqueryCriterion subqueryCriterion = (Query.SubqueryCriterion) criterion;
String comparisonExpression = " <= SOME (";
return handleSubQuery(entity, q, whereClause, logicalName, position, parameters, conversionService, allowJoins, hibernateCompatible, subqueryCriterion, comparisonExpression);
}
});
}