diff --git a/querydsl-jpa/derby.log b/querydsl-jpa/derby.log index 63a19b3da..c62395463 100644 --- a/querydsl-jpa/derby.log +++ b/querydsl-jpa/derby.log @@ -1,7 +1,7 @@ ---------------------------------------------------------------- -Tue Dec 20 21:23:01 EET 2011: -Booting Derby version The Apache Software Foundation - Apache Derby - 10.8.2.2 - (1181258): instance a816c00e-0134-5ced-4557-000002bb1ce0 -on database directory /home/tiwe/work/querydsl/querydsl-jpa/target/derbydb with class loader sun.misc.Launcher$AppClassLoader@16f0472 +Sat Jan 14 19:25:17 EET 2012: +Booting Derby version The Apache Software Foundation - Apache Derby - 10.8.2.2 - (1181258): instance a816c00e-0134-dd40-7974-000002cca5a0 +on database directory /home/tiwe/work/querydsl/querydsl-jpa/target/derbydb with class loader sun.misc.Launcher$AppClassLoader@1a16869 Loaded from file:/home/tiwe/.m2/repository/org/apache/derby/derby/10.8.2.2/derby-10.8.2.2.jar java.vendor=Sun Microsystems Inc. java.runtime.version=1.6.0_26-b03 diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index d1e8b4ad5..d2412f7fa 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -42,6 +42,7 @@ import com.mysema.query.sql.SQLTemplates; import com.mysema.query.sql.Union; import com.mysema.query.sql.UnionImpl; import com.mysema.query.types.Expression; +import com.mysema.query.types.ExpressionUtils; import com.mysema.query.types.FactoryExpression; import com.mysema.query.types.Path; import com.mysema.query.types.SubQueryExpression; @@ -109,6 +110,12 @@ public abstract class AbstractHibernateSQLQuery... args) { + for (int i = 0; i < args.length; i++) { + // create aliases for non path projections + if (!(args[i] instanceof Path) && !(args[i] instanceof FactoryExpression)) { + args[i] = ExpressionUtils.as(args[i], "col"+(i+1)); + } + } queryMixin.getMetadata().setValidate(false); queryMixin.addToProjection(args); return createQuery(toQueryString()); @@ -258,6 +265,7 @@ public abstract class AbstractHibernateSQLQuery Union innerUnion(SubQueryExpression... sq) { queryMixin.getMetadata().setValidate(false); if (!queryMixin.getMetadata().getJoins().isEmpty()) { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index 86ecfb6c7..5e47ed810 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -43,6 +43,9 @@ import com.mysema.query.sql.Union; import com.mysema.query.sql.UnionImpl; import com.mysema.query.types.EntityPath; import com.mysema.query.types.Expression; +import com.mysema.query.types.ExpressionUtils; +import com.mysema.query.types.FactoryExpression; +import com.mysema.query.types.Path; import com.mysema.query.types.SubQueryExpression; import com.mysema.query.types.query.ListSubQuery; @@ -100,6 +103,12 @@ public abstract class AbstractJPASQLQuery & com } public Query createQuery(Expression... args) { + for (int i = 0; i < args.length; i++) { + // create aliases for non path projections + if (!(args[i] instanceof Path) && !(args[i] instanceof FactoryExpression)) { + args[i] = ExpressionUtils.as(args[i], "col"+(i+1)); + } + } queryMixin.getMetadata().setValidate(false); queryMixin.addToProjection(args); return createQuery(toQueryString()); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/sql/JPADerbySQLTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/sql/JPADerbySQLTest.java index 56031042f..1f4d1f74e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/sql/JPADerbySQLTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/sql/JPADerbySQLTest.java @@ -102,6 +102,14 @@ public class JPADerbySQLTest { assertEquals(6, query().from(cat).where(cat.dtype.eq("C")).list(cat.id).size()); } + @Test + public void List_Non_Path() { + assertEquals(6, query().from(cat).where(cat.dtype.eq("C")).list( + cat.birthdate.year(), + cat.birthdate.month(), + cat.birthdate.dayOfMonth()).size()); + } + @Test public void List_With_Limit(){ assertEquals(3, query().from(cat).limit(3).list(cat.id).size());