HHH-16077 - Added named native queries cannot specify result-class
This commit is contained in:
parent
ba53bc4dad
commit
bab25b42e4
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
* 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 http://www.gnu.org/licenses/lgpl-2.1.html.
|
||||||
|
*/
|
||||||
|
package org.hibernate.orm.test.query.sql;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
import org.hibernate.engine.spi.SessionImplementor;
|
||||||
|
import org.hibernate.query.NativeQuery;
|
||||||
|
import org.hibernate.query.Query;
|
||||||
|
import org.hibernate.query.spi.QueryImplementor;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.FailureExpected;
|
||||||
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Steve Ebersole
|
||||||
|
*/
|
||||||
|
@RequiresDialect(H2Dialect.class)
|
||||||
|
@DomainModel
|
||||||
|
@SessionFactory
|
||||||
|
public class NativeQueryAsNamedTests {
|
||||||
|
private static final String THE_CREATE = "create table ce_generic_data ( " +
|
||||||
|
" parent_id bigint, " +
|
||||||
|
" parent_type varchar(50), " +
|
||||||
|
" generic_data_definition_id bigint, " +
|
||||||
|
" creator_id bigint" +
|
||||||
|
")";
|
||||||
|
|
||||||
|
private static final String THE_SELECT = "select parent_id " +
|
||||||
|
"from ce_generic_data " +
|
||||||
|
"where parent_id > ?2 " +
|
||||||
|
" and parent_type = ?1 " +
|
||||||
|
" and generic_data_definition_id < ?2 " +
|
||||||
|
" and creator_id <> ?3";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Port of the test attached on HHH-16068
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@JiraKey( "HHH-16068" )
|
||||||
|
public void testParameters(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( (session) -> {
|
||||||
|
final NativeQuery<String> nativeQuery = session.createNativeQuery(THE_SELECT);
|
||||||
|
bindParameters( nativeQuery, session );
|
||||||
|
nativeQuery.list();
|
||||||
|
|
||||||
|
// now add it as a named query
|
||||||
|
session.getSessionFactory().addNamedQuery( "the_select", nativeQuery );
|
||||||
|
|
||||||
|
// and execute it as a named query
|
||||||
|
final QueryImplementor<String> namedQuery = session.createNamedQuery( "the_select" );
|
||||||
|
bindParameters( namedQuery, session );
|
||||||
|
namedQuery.list();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seems like this should work, but currently does not
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
@FailureExpected( reason = "Session#createNamedQuery for a native-query does not like passing the result-class" )
|
||||||
|
public void testResultClass(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( (session) -> {
|
||||||
|
final NativeQuery<String> nativeQuery = session.createNativeQuery( THE_SELECT, String.class );
|
||||||
|
bindParameters( nativeQuery, session );
|
||||||
|
nativeQuery.list();
|
||||||
|
|
||||||
|
// now add it as a named query
|
||||||
|
session.getSessionFactory().addNamedQuery( "the_select", nativeQuery );
|
||||||
|
|
||||||
|
// and execute it as a named query
|
||||||
|
final QueryImplementor<String> namedQuery = session.createNamedQuery( "the_select", String.class );
|
||||||
|
bindParameters( namedQuery, session );
|
||||||
|
namedQuery.list();
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bindParameters(Query<?> query, SessionImplementor session) {
|
||||||
|
query.setParameter(1, "98C1");
|
||||||
|
query.setParameter(2, 1000L);
|
||||||
|
query.setParameter(3, 2000L);
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public void createSchema(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction( (session) -> {
|
||||||
|
session.doWork( (connection) -> {
|
||||||
|
session.createNativeMutationQuery( THE_CREATE ).executeUpdate();
|
||||||
|
} );
|
||||||
|
} );
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue