package org.hibernate.test.hbm.query; import java.io.StringReader; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl; import org.hibernate.engine.jdbc.ReaderInputStream; import org.hibernate.engine.query.spi.sql.NativeSQLQueryReturn; import org.hibernate.engine.query.spi.sql.NativeSQLQueryRootReturn; import org.hibernate.engine.spi.NamedSQLQueryDefinition; import org.hibernate.testing.TestForIssue; import org.hibernate.testing.junit4.BaseUnitTestCase; import org.junit.Assert; import org.junit.Test; /** * @author Koen Aers */ @TestForIssue( jiraKey = "HHH-10405" ) public class QueryReturnTest extends BaseUnitTestCase { private static String QUERY_RETURN_HBM_XML = "<hibernate-mapping package='org.hibernate.test.hbm.query'> "+ " <class name='QueryReturnTest$Bar'> "+ " <id name='id'> "+ " <generator class='sequence'/> "+ " </id> "+ " <property name='foo' type='string'/> "+ " </class> "+ " <sql-query name='myQuery'> "+ " <synchronize table='myTable'/> "+ " <return "+ " alias='e' "+ " class='org.hibernate.test.hbm.query.QueryReturnTest$Bar'"+ " /> "+ " <![CDATA[from elephant as {e} where {e.age} > 50]]> "+ " </sql-query> "+ "</hibernate-mapping> "; @Test public void testQueryReturn() { StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder() .applySetting("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); StandardServiceRegistry standardServiceRegistry = serviceRegistryBuilder.build(); MetadataSources metadataSources = new MetadataSources(standardServiceRegistry); try { metadataSources.addInputStream(new ReaderInputStream(new StringReader(QUERY_RETURN_HBM_XML))); Metadata metadata = metadataSources.buildMetadata(); NamedSQLQueryDefinition myQuery = metadata.getNamedNativeQueryDefinition("myQuery"); Assert.assertNotNull(myQuery); NativeSQLQueryReturn[] myQueryReturns = myQuery.getQueryReturns(); Assert.assertNotNull(myQueryReturns); Assert.assertEquals(1, myQueryReturns.length); Assert.assertTrue(NativeSQLQueryRootReturn.class.isInstance(myQueryReturns[0])); NativeSQLQueryRootReturn myQueryRootReturn = (NativeSQLQueryRootReturn)myQueryReturns[0]; Assert.assertEquals("e", myQueryRootReturn.getAlias()); Assert.assertEquals("org.hibernate.test.hbm.query.QueryReturnTest$Bar", myQueryRootReturn.getReturnEntityName()); } finally { if ( standardServiceRegistry instanceof StandardServiceRegistryImpl ) { ( (StandardServiceRegistryImpl) standardServiceRegistry ).destroy(); } } } public class Bar { public Integer id; public String foo; } }