Author: gbadner
Date: 2010-08-19 16:22:48 -0400 (Thu, 19 Aug 2010)
New Revision: 20195
Modified:
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/querycache/AbstractQueryCacheResultTransformerTest.java
Log:
HHH-5163 : added test implementing a workaround for ClassCastException caching results
using a ResultTransformer
Modified:
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/querycache/AbstractQueryCacheResultTransformerTest.java
===================================================================
---
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/querycache/AbstractQueryCacheResultTransformerTest.java 2010-08-19
19:57:42 UTC (rev 20194)
+++
core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/querycache/AbstractQueryCacheResultTransformerTest.java 2010-08-19
20:22:48 UTC (rev 20195)
@@ -47,6 +47,7 @@
import org.hibernate.junit.functional.FunctionalTestCase;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.transform.AliasToBeanConstructorResultTransformer;
+import org.hibernate.transform.ResultTransformer;
import org.hibernate.transform.Transformers;
import org.hibernate.type.Type;
import org.hibernate.util.ReflectHelper;
@@ -1391,6 +1392,50 @@
runTest( hqlExecutor, criteriaExecutor, checker, false );
}
+ public void testMultiProjectionListThenApplyAliasToBean() throws Exception {
+
+ CriteriaExecutor criteriaExecutor = new CriteriaExecutor() {
+ protected Criteria getCriteria(Session s) {
+ return s.createCriteria( Enrolment.class, "e" )
+ .createAlias( "e.student", "st" )
+ .createAlias( "e.course", "co" )
+ .setProjection(
+ Projections.projectionList()
+ .add( Property.forName( "st.name" ) )
+ .add( Property.forName( "co.description" ) )
+ )
+ .addOrder( Order.asc( "e.studentNumber" ) );
+ }
+ };
+ HqlExecutor hqlExecutor = new HqlExecutor() {
+ public Query getQuery(Session s) {
+ return s.createQuery( "select st.name as studentName, co.description as
courseDescription from Enrolment e join e.student st join e.course co order by
e.studentNumber" );
+ }
+ };
+ ResultChecker checker = new ResultChecker() {
+ public void check(Object results) {
+ List resultList = ( List ) results;
+ ResultTransformer transformer = Transformers.aliasToBean( StudentDTO.class );
+ String[] aliases = new String[] { "studentName",
"courseDescription" };
+ for ( int i = 0 ; i < resultList.size(); i++ ) {
+ resultList.set(
+ i,
+ transformer.transformTuple( ( Object[] ) resultList.get( i ), aliases )
+ );
+ }
+
+ assertEquals( 2, resultList.size() );
+ StudentDTO dto = ( StudentDTO ) resultList.get( 0 );
+ assertEquals( courseExpected.getDescription(), dto.getDescription() );
+ assertEquals( yogiExpected.getName(), dto.getName() );
+ dto = ( StudentDTO ) resultList.get( 1 );
+ assertEquals( courseExpected.getDescription(), dto.getDescription() );
+ assertEquals( shermanExpected.getName(), dto.getName() );
+ }
+ };
+ runTest( hqlExecutor, criteriaExecutor, checker, false );
+ }
+
public void testAliasToBeanDtoLiteralArgList() throws Exception {
CriteriaExecutor criteriaExecutor = new CriteriaExecutor() {
Show replies by date