[hibernate-commits] Hibernate SVN: r20195 - core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/querycache.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Aug 19 16:22:49 EDT 2010


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() {



More information about the hibernate-commits mailing list