From 15e9b028b5dc12d45cf067a027e04df719032fd3 Mon Sep 17 00:00:00 2001 From: Steve Ebersole Date: Wed, 31 Jul 2013 11:16:40 -0500 Subject: [PATCH] HHH-8398 - StoredProcedureQuery passed resultClasses chooses incorrect aliases to extract results --- .../hibernate/result/internal/ResultImpl.java | 20 ++++++++----------- ...JpaUsageTest.java => JpaTckUsageTest.java} | 4 ++-- 2 files changed, 10 insertions(+), 14 deletions(-) rename hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/{JpaUsageTest.java => JpaTckUsageTest.java} (97%) diff --git a/hibernate-core/src/main/java/org/hibernate/result/internal/ResultImpl.java b/hibernate-core/src/main/java/org/hibernate/result/internal/ResultImpl.java index a484d64a1f..2cef2b060c 100644 --- a/hibernate-core/src/main/java/org/hibernate/result/internal/ResultImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/result/internal/ResultImpl.java @@ -251,6 +251,8 @@ public boolean isResultSet() { } private static CustomLoaderExtension buildSpecializedCustomLoader(final ResultContext context) { + // might be better to just manually construct the Return(s).. SQLQueryReturnProcessor does a lot of + // work that is really unnecessary here. final SQLQueryReturnProcessor processor = new SQLQueryReturnProcessor( context.getQueryReturns(), context.getSession().getFactory() @@ -292,8 +294,7 @@ private static class CustomLoaderExtension extends CustomLoader { private QueryParameters queryParameters; private SessionImplementor session; - // temp - private final CustomQuery customQuery; + private boolean needsDiscovery = true; public CustomLoaderExtension( CustomQuery customQuery, @@ -302,14 +303,16 @@ public CustomLoaderExtension( super( customQuery, session.getFactory() ); this.queryParameters = queryParameters; this.session = session; - - this.customQuery = customQuery; } // todo : this would be a great way to add locking to stored procedure support (at least where returning entities). public List processResultSet(ResultSet resultSet) throws SQLException { - super.autoDiscoverTypes( resultSet ); + if ( needsDiscovery ) { + super.autoDiscoverTypes( resultSet ); + // todo : EntityAliases discovery + needsDiscovery = false; + } return super.processResultSet( resultSet, queryParameters, @@ -320,12 +323,5 @@ public List processResultSet(ResultSet resultSet) throws SQLException { Collections.emptyList() ); } - - @Override - protected void validateAlias(String alias) { - System.out.println( - "TEMPORARY... discovered result set alias from stored procedure [" + alias + "] : " + customQuery.getSQL() - ); - } } } diff --git a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaUsageTest.java b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaTckUsageTest.java similarity index 97% rename from hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaUsageTest.java rename to hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaTckUsageTest.java index b7ba4ddf2d..355c4d6705 100644 --- a/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaUsageTest.java +++ b/hibernate-entitymanager/src/test/java/org/hibernate/jpa/test/procedure/JpaTckUsageTest.java @@ -49,7 +49,7 @@ * @author Steve Ebersole */ @RequiresDialect( H2Dialect.class ) -public class JpaUsageTest extends BaseEntityManagerFunctionalTestCase { +public class JpaTckUsageTest extends BaseEntityManagerFunctionalTestCase { @Test public void testMultipleGetUpdateCountCalls() { @@ -60,7 +60,7 @@ public void testMultipleGetUpdateCountCalls() { // this is what the TCK attempts to do, don't shoot the messenger... query.getUpdateCount(); // yep, twice - int updateCount = query.getUpdateCount(); + query.getUpdateCount(); em.getTransaction().commit(); em.close();