Skip to content

Commit 4d984cc

Browse files
Aaron Longgraemerocher
authored andcommitted
GRAILS-9644 - list() with args only returns one projection property
1 parent f044d2e commit 4d984cc

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
@@ -1540,16 +1540,18 @@ else if (paginationEnabledList) {
15401540

15411541
// Restore the previous projection, add settings for the pagination parameters,
15421542
// and then execute the query.
1543-
if (projectionList != null && projectionList.getLength() > 0) {
1544-
criteria.setProjection(projectionList);
1545-
} else {
1546-
criteria.setProjection(null);
1547-
}
1543+
boolean isProjection = (projectionList != null && projectionList.getLength() > 0);
1544+
criteria.setProjection(isProjection ? projectionList : null);
1545+
15481546
for (Order orderEntry : orderEntries) {
15491547
criteria.addOrder(orderEntry);
15501548
}
15511549
if (resultTransformer == null) {
1552-
criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
1550+
// GRAILS-9644 - Use projection transformer
1551+
criteria.setResultTransformer( isProjection ?
1552+
CriteriaSpecification.PROJECTION :
1553+
CriteriaSpecification.ROOT_ENTITY
1554+
);
15531555
}
15541556
else if (paginationEnabledList) {
15551557
// 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
@@ -769,7 +769,7 @@ class HibernateCriteriaBuilderTests extends AbstractGrailsHibernateTests {
769769

770770
List results = parse("{ " +
771771
"projections { " +
772-
"property('lastName',)" +
772+
"property('lastName')" +
773773
"}" +
774774
"}", "Test1",CriteriaBuilderTestClass.name)
775775

@@ -1619,14 +1619,17 @@ class HibernateCriteriaBuilderTests extends AbstractGrailsHibernateTests {
16191619

16201620
obj.invokeMethod("save", null)
16211621

1622-
List results = parse(".list([:]) { " +
1623-
"projections { " +
1624-
"property('firstName')" +
1622+
List results = parse(".list([:]) {\n" +
1623+
"projections { \n" +
1624+
"property('firstName')\n" +
1625+
"property('lastName')\n" +
16251626
"}" +
1626-
"}", "Test1",CriteriaBuilderTestClass.name)
1627+
"}", "Test1", CriteriaBuilderTestClass.name)
16271628

1628-
assertEquals 1 , results.size()
1629-
assertTrue 'Result list should contain Strings', results[0] instanceof String
1629+
assertEquals 1, results.size()
1630+
assertEquals 2, results[0].size()
1631+
assertEquals "homer", results[0][0]
1632+
assertEquals "simpson", results[0][1]
16301633
}
16311634

16321635

0 commit comments

Comments
 (0)