protected static void buildSubQuery(StringBuilder q, StringBuilder whereClause, int position, List parameters, ConversionService conversionService, boolean allowJoins, boolean hibernateCompatible, QueryableCriteria subquery) {
PersistentEntity associatedEntity = subquery.getPersistentEntity();
String associatedEntityName = associatedEntity.getName();
String associatedEntityLogicalName = associatedEntity.getDecapitalizedName() + position;
whereClause.append("SELECT ");
buildSelect(whereClause, subquery.getProjections(), associatedEntityLogicalName, associatedEntity);
whereClause.append(" FROM ")
.append(associatedEntityName)
.append(' ')
.append(associatedEntityLogicalName)
.append(" WHERE ");
List<Query.Criterion> criteria = subquery.getCriteria();
for (Query.Criterion subCriteria : criteria) {
QueryHandler queryHandler = queryHandlers.get(subCriteria.getClass());
queryHandler.handle(associatedEntity, subCriteria, q, whereClause, associatedEntityLogicalName, position, parameters, conversionService, allowJoins, hibernateCompatible);
}
}