Search in sources :

Example 1 with FactoryExpressionTransformer

use of com.querydsl.jpa.FactoryExpressionTransformer in project querydsl by querydsl.

the class AbstractHibernateSQLQuery method createQuery.

private Query createQuery(boolean forCount) {
    NativeSQLSerializer serializer = (NativeSQLSerializer) serialize(forCount);
    String queryString = serializer.toString();
    logQuery(queryString, serializer.getConstantToLabel());
    org.hibernate.SQLQuery query = session.createSQLQuery(queryString);
    // set constants
    HibernateUtil.setConstants(query, serializer.getConstantToLabel(), queryMixin.getMetadata().getParams());
    if (!forCount) {
        ListMultimap<Expression<?>, String> aliases = serializer.getAliases();
        Set<String> used = Sets.newHashSet();
        // set entity paths
        Expression<?> projection = queryMixin.getMetadata().getProjection();
        if (projection instanceof FactoryExpression) {
            for (Expression<?> expr : ((FactoryExpression<?>) projection).getArgs()) {
                if (isEntityExpression(expr)) {
                    query.addEntity(extractEntityExpression(expr).toString(), expr.getType());
                } else if (aliases.containsKey(expr)) {
                    for (String scalar : aliases.get(expr)) {
                        if (!used.contains(scalar)) {
                            query.addScalar(scalar);
                            used.add(scalar);
                            break;
                        }
                    }
                }
            }
        } else if (isEntityExpression(projection)) {
            query.addEntity(extractEntityExpression(projection).toString(), projection.getType());
        } else if (aliases.containsKey(projection)) {
            for (String scalar : aliases.get(projection)) {
                if (!used.contains(scalar)) {
                    query.addScalar(scalar);
                    used.add(scalar);
                    break;
                }
            }
        }
        // set result transformer, if projection is a FactoryExpression instance
        if (projection instanceof FactoryExpression) {
            query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression<?>) projection));
        }
    }
    if (fetchSize > 0) {
        query.setFetchSize(fetchSize);
    }
    if (timeout > 0) {
        query.setTimeout(timeout);
    }
    if (cacheable != null) {
        query.setCacheable(cacheable);
    }
    if (cacheRegion != null) {
        query.setCacheRegion(cacheRegion);
    }
    if (readOnly != null) {
        query.setReadOnly(readOnly);
    }
    return query;
}
Also used : FactoryExpression(com.querydsl.core.types.FactoryExpression) FactoryExpression(com.querydsl.core.types.FactoryExpression) Expression(com.querydsl.core.types.Expression) FactoryExpressionTransformer(com.querydsl.jpa.FactoryExpressionTransformer) NativeSQLSerializer(com.querydsl.jpa.NativeSQLSerializer) org.hibernate(org.hibernate)

Aggregations

Expression (com.querydsl.core.types.Expression)1 FactoryExpression (com.querydsl.core.types.FactoryExpression)1 FactoryExpressionTransformer (com.querydsl.jpa.FactoryExpressionTransformer)1 NativeSQLSerializer (com.querydsl.jpa.NativeSQLSerializer)1 org.hibernate (org.hibernate)1