diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml
index c8cf557e2..8f3bbccbb 100644
--- a/querydsl-jpa/pom.xml
+++ b/querydsl-jpa/pom.xml
@@ -126,7 +126,7 @@
com.h2database
h2
- 1.2.133
+ ${h2.version}
test
diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java
index bf2e78db8..66804ffef 100644
--- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java
+++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java
@@ -6,6 +6,7 @@
package com.mysema.query.jpa.impl;
import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -52,6 +53,8 @@ public abstract class AbstractJPAQuery> extends JP
private Class> hibernateQueryClass;
+ private boolean factoryExpressionUsed = false;
+
public AbstractJPAQuery(EntityManager em) {
this(new DefaultSessionHolder(em), HQLTemplates.DEFAULT, new DefaultQueryMetadata());
}
@@ -156,13 +159,57 @@ public abstract class AbstractJPAQuery> extends JP
} catch (NoSuchMethodException e) {
throw new QueryException(e.getMessage(), e);
}
-
+ } else {
+ factoryExpressionUsed = true;
}
}
}
return query;
}
+
+ /**
+ * Transforms results using FactoryExpression if ResultTransformer can't be used
+ *
+ * @param query
+ * @return
+ */
+ private List> getResultList(Query query) {
+ // TODO : use lazy list here?
+ if (factoryExpressionUsed) {
+ List> results = query.getResultList();
+ List