Skip to content

Commit 9198296

Browse files
author
Aaron Long
committed
GRAILS-9644 - list() with args only returns one projection property
1 parent ba47551 commit 9198296

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

grails-hibernate/src/main/groovy/grails/orm/HibernateCriteriaBuilder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1569,16 +1569,18 @@ else if (paginationEnabledList) {
15691569

15701570
// Restore the previous projection, add settings for the pagination parameters,
15711571
// and then execute the query.
1572-
if (projectionList != null && projectionList.getLength() > 0) {
1573-
criteria.setProjection(projectionList);
1574-
} else {
1575-
criteria.setProjection(null);
1576-
}
1572+
boolean isProjection = (projectionList != null && projectionList.getLength() > 0);
1573+
criteria.setProjection(isProjection ? projectionList : null);
1574+
15771575
for (Order orderEntry : orderEntries) {
15781576
criteria.addOrder(orderEntry);
15791577
}
15801578
if (resultTransformer == null) {
1581-
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
1579+
// GRAILS-9644 - Use projection transformer
1580+
criteria.setResultTransformer( isProjection ?
1581+
CriteriaSpecification.PROJECTION :
1582+
CriteriaSpecification.ROOT_ENTITY
1583+
);
15821584
}
15831585
else if (paginationEnabledList) {
15841586
// relevant to GRAILS-5692

grails-test-suite-persistence/src/test/groovy/org/codehaus/groovy/grails/orm/hibernate/HibernateCriteriaBuilderTests.groovy

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,7 @@ class HibernateCriteriaBuilderTests extends AbstractGrailsHibernateTests {
893893

894894
List results = parse("{ " +
895895
"projections { " +
896-
"property('lastName',)" +
896+
"property('lastName')" +
897897
"}" +
898898
"}", "Test1",CriteriaBuilderTestClass.name)
899899

@@ -1739,14 +1739,17 @@ class HibernateCriteriaBuilderTests extends AbstractGrailsHibernateTests {
17391739

17401740
obj.invokeMethod("save", null)
17411741

1742-
List results = parse(".list([:]) { " +
1743-
"projections { " +
1744-
"property('firstName')" +
1742+
List results = parse(".list([:]) {\n" +
1743+
"projections { \n" +
1744+
"property('firstName')\n" +
1745+
"property('lastName')\n" +
17451746
"}" +
1746-
"}", "Test1",CriteriaBuilderTestClass.name)
1747+
"}", "Test1", CriteriaBuilderTestClass.name)
17471748

1748-
assertEquals 1 , results.size()
1749-
assertTrue 'Result list should contain Strings', results[0] instanceof String
1749+
assertEquals 1, results.size()
1750+
assertEquals 2, results[0].size()
1751+
assertEquals "homer", results[0][0]
1752+
assertEquals "simpson", results[0][1]
17501753
}
17511754

17521755
void testCriteriaInvolvingNestedRelationshipsSomeOfWhichAreEmbedded() {

0 commit comments

Comments
 (0)