From 7ee3b2858b6b6455deb0eeb7e991cbb83ff14fa9 Mon Sep 17 00:00:00 2001 From: Guenther Demetz Date: Tue, 31 Jul 2018 09:43:53 +0200 Subject: [PATCH] Test for Issue HHH-12870 --- .../AbstractSharedSessionContract.java | 7 +-- .../org/hibernate/test/sql/hand/Speech.java | 8 +++- .../test/sql/hand/SpeechInterface.java | 29 ++++++++++++ .../sql/hand/query/NativeSQLQueriesTest.java | 45 +++++++++++++++++++ 4 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/test/sql/hand/SpeechInterface.java diff --git a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java index ac3d5da8ac..ee9abb82f4 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/AbstractSharedSessionContract.java @@ -935,9 +935,10 @@ public abstract class AbstractSharedSessionContract implements SharedSessionCont if ( Tuple.class.equals( resultClass ) ) { query.setResultTransformer( new NativeQueryTupleTransformer() ); } - else { - query.addEntity( "alias1", resultClass.getName(), LockMode.READ ); - } +// why should we add here an Entity automatically: it's a wild guess and erratic most times +// else { +// query.addEntity( "alias1", resultClass.getName(), LockMode.READ ); +// } } @Override diff --git a/hibernate-core/src/test/java/org/hibernate/test/sql/hand/Speech.java b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/Speech.java index 0e93c9375c..57b92a2212 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/sql/hand/Speech.java +++ b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/Speech.java @@ -12,31 +12,37 @@ package org.hibernate.test.sql.hand; /** * @author Emmanuel Bernard */ -public class Speech { +public class Speech implements SpeechInterface { private Integer id; private String name; private Double length; + @Override public Integer getId() { return id; } + @Override public void setId(Integer id) { this.id = id; } + @Override public Double getLength() { return length; } + @Override public void setLength(Double length) { this.length = length; } + @Override public String getName() { return name; } + @Override public void setName(String name) { this.name = name; } diff --git a/hibernate-core/src/test/java/org/hibernate/test/sql/hand/SpeechInterface.java b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/SpeechInterface.java new file mode 100644 index 0000000000..df24fc01fa --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/SpeechInterface.java @@ -0,0 +1,29 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ + +//$Id: $ +package org.hibernate.test.sql.hand; + + +/** + * @author Günther Demetz + */ +public interface SpeechInterface { + + public Integer getId(); + + public void setId(Integer id); + + public Double getLength(); + + + public void setLength(Double length); + + public String getName(); + + public void setName(String name); +} diff --git a/hibernate-core/src/test/java/org/hibernate/test/sql/hand/query/NativeSQLQueriesTest.java b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/query/NativeSQLQueriesTest.java index abbc3a7fcf..434ae12eeb 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/sql/hand/query/NativeSQLQueriesTest.java +++ b/hibernate-core/src/test/java/org/hibernate/test/sql/hand/query/NativeSQLQueriesTest.java @@ -31,6 +31,7 @@ import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.MySQL5Dialect; import org.hibernate.engine.query.spi.sql.NativeSQLQueryReturn; import org.hibernate.engine.spi.NamedSQLQueryDefinitionBuilder; +import org.hibernate.query.NativeQuery; import org.hibernate.transform.BasicTransformerAdapter; import org.hibernate.transform.DistinctRootEntityResultTransformer; import org.hibernate.transform.Transformers; @@ -42,6 +43,7 @@ import org.hibernate.type.TimestampType; import org.hibernate.testing.FailureExpected; import org.hibernate.testing.RequiresDialect; import org.hibernate.testing.SkipForDialect; +import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase; import org.hibernate.test.sql.hand.Dimension; import org.hibernate.test.sql.hand.Employment; @@ -53,6 +55,7 @@ import org.hibernate.test.sql.hand.Person; import org.hibernate.test.sql.hand.Product; import org.hibernate.test.sql.hand.SpaceShip; import org.hibernate.test.sql.hand.Speech; +import org.hibernate.test.sql.hand.SpeechInterface; import org.hibernate.test.sql.hand.TextHolder; import org.junit.Test; @@ -740,6 +743,48 @@ public class NativeSQLQueriesTest extends BaseCoreFunctionalTestCase { s.getTransaction().commit(); s.close(); } + + @Test + @TestForIssue(jiraKey="HHH-12870") + public void testExplicitAddEntity() { + Session s = openSession(); + Transaction t = s.beginTransaction(); + Speech speech = new Speech(); + speech.setLength( new Double( 23d ) ); + speech.setName( "Mine" ); + s.persist( speech ); + s.flush(); + s.clear(); + + NativeQuery query = s.createNativeQuery( "select {s.*} from Speech s", Speech.class ); + query.addEntity("s", Speech.class); + List l = query.list(); + assertEquals( l.size(), 1 ); + + t.rollback(); + s.close(); + } + + @Test + @TestForIssue(jiraKey="HHH-12870") + public void testInterfaceReturnType() { + Session s = openSession(); + Transaction t = s.beginTransaction(); + Speech speech = new Speech(); + speech.setLength( new Double( 23d ) ); + speech.setName( "Mine" ); + s.persist( speech ); + s.flush(); + s.clear(); + + NativeQuery query = s.createNativeQuery( "select {s.*} from Speech s", SpeechInterface.class ); + query.addEntity("s", Speech.class); + List l = query.list(); + assertEquals( l.size(), 1 ); + + t.rollback(); + s.close(); + } @Test public void testMixAndMatchEntityScalar() {