super( session, parameterMetadata ); this.sqlString = queryDef.getQueryString(); this.callable = queryDef.isCallable(); this.querySpaces = queryDef.getQuerySpaces() == null ? null : new ArrayList<>( queryDef.getQuerySpaces() ); if ( queryDef.getResultSetRef() != null ) { ResultSetMappingDefinition definition = session.getFactory() .getNamedQueryRepository() .getResultSetMappingDefinition( queryDef.getResultSetRef() ); if ( definition == null ) { throw new MappingException( "Unable to find resultset-ref definition: " + queryDef.getResultSetRef() ); else if ( queryDef.getQueryReturns() != null && queryDef.getQueryReturns().length > 0 ) { this.queryReturns = new ArrayList<>( Arrays.asList( queryDef.getQueryReturns() ) );
@Override public NamedSQLQueryDefinition createNamedQueryDefinition() { return new NamedSQLQueryDefinition( name, query, cacheable, cacheRegion, timeout, fetchSize, flushMode, cacheMode, readOnly, comment, parameterTypes, firstResult, maxResults, resultSetRef, querySpacesCopy(), callable, queryReturns ); }
@Override public NamedSQLQueryDefinition makeCopy(String name) { return new NamedSQLQueryDefinition( name, getQuery(), isCacheable(), getCacheRegion(), getTimeout(), getFetchSize(), getFlushMode(), getCacheMode(), isReadOnly(), getComment(), getParameterTypes(), getFirstResult(), getMaxResults(), getResultSetRef(), getQuerySpaces(), isCallable(), getQueryReturns() ); }
@Override public void addNamedNativeQuery(NamedSQLQueryDefinition def) { if ( def == null ) { throw new IllegalArgumentException( "Named native query definition object is null" ); } if ( def.getName() == null ) { throw new IllegalArgumentException( "Named native query definition name is null: " + def.getQueryString() ); } if ( defaultNamedNativeQueryNames.contains( def.getName() ) ) { return; } applyNamedNativeQuery( def.getName(), def ); }
public synchronized void registerNamedSQLQueryDefinition(String name, NamedSQLQueryDefinition definition) { if ( ! name.equals( definition.getName() ) ) { definition = definition.makeCopy( name ); } final Map<String, NamedSQLQueryDefinition> copy = CollectionHelper.makeCopy( namedSqlQueryDefinitionMap ); final NamedQueryDefinition previous = copy.put( name, definition ); if ( previous != null ) { log.debugf( "registering named SQL query definition [%s] overriding previously registered definition [%s]", name, previous ); } this.namedSqlQueryDefinitionMap = Collections.unmodifiableMap( copy ); }
@SuppressWarnings({"unchecked", "WeakerAccess"}) protected void resultClassChecking(Class resultType, NamedSQLQueryDefinition namedQueryDefinition) { final NativeSQLQueryReturn[] queryReturns; if ( namedQueryDefinition.getQueryReturns() != null ) { queryReturns = namedQueryDefinition.getQueryReturns(); else if ( namedQueryDefinition.getResultSetRef() != null ) { final ResultSetMappingDefinition rsMapping = getFactory().getNamedQueryRepository().getResultSetMappingDefinition( namedQueryDefinition.getResultSetRef() ); queryReturns = rsMapping.getQueryReturns(); throw new AssertionFailure( "Unable to load class [" + entityClassName + "] declared on named native query [" + namedQueryDefinition.getName() + "]" );
@SuppressWarnings({"WeakerAccess", "unchecked"}) protected <T> NativeQueryImplementor createNativeQuery(NamedSQLQueryDefinition queryDefinition, Class<T> resultType) { if ( resultType != null && !Tuple.class.equals(resultType)) { resultClassChecking( resultType, queryDefinition ); } final NativeQueryImpl query = new NativeQueryImpl( queryDefinition, this, factory.getQueryPlanCache().getSQLParameterMetadata( queryDefinition.getQueryString(), false ) ); if (Tuple.class.equals(resultType)) { query.setResultTransformer(new NativeQueryTupleTransformer()); } query.setHibernateFlushMode( queryDefinition.getFlushMode() ); query.setComment( queryDefinition.getComment() != null ? queryDefinition.getComment() : queryDefinition.getName() ); if ( queryDefinition.getLockOptions() != null ) { query.setLockOptions( queryDefinition.getLockOptions() ); } initQueryFromNamedDefinition( query, queryDefinition ); applyQuerySettingsAndHints( query ); return query; }
String resultSetRef = ref == null ? null : ref.getValue(); if ( StringHelper.isNotEmpty( resultSetRef ) ) { namedQuery = new NamedSQLQueryDefinition( queryName, queryElem.getText(), namedQuery = new NamedSQLQueryDefinition( queryName, queryElem.getText(), LOG.debugf( "Named SQL query: %s -> %s", namedQuery.getName(), namedQuery.getQueryString() );
if ( !BinderHelper.isEmptyAnnotationValue( resultSetMapping ) ) { query = new NamedSQLQueryDefinition( queryAnn.name(), queryName, query = new NamedSQLQueryDefinition( queryAnn.name(), queryName, mappings.addDefaultSQLQuery( query.getName(), query ); mappings.addSQLQuery( query.getName(), query );
if ( queryDefinition.getQueryReturns() != null ) { queryReturns = queryDefinition.getQueryReturns(); else if ( queryDefinition.getResultSetRef() != null ) { final ResultSetMappingDefinition rsMapping = factoryImplementor.getResultSetMapping( queryDefinition.getResultSetRef() ); queryReturns = rsMapping.getQueryReturns();
private NativeQueryImplementor createNativeQuery(NamedSQLQueryDefinition queryDefinition, boolean isOrdinalParameterZeroBased) { final ParameterMetadata parameterMetadata = factory.getQueryPlanCache().getSQLParameterMetadata( queryDefinition.getQueryString(), isOrdinalParameterZeroBased ); return getNativeQueryImplementor( queryDefinition, parameterMetadata ); }
@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(); } } }
private NativeQueryImplementor getNativeQueryImplementor( NamedSQLQueryDefinition queryDefinition, ParameterMetadata parameterMetadata) { final NativeQueryImpl query = new NativeQueryImpl( queryDefinition, this, parameterMetadata ); query.setComment( queryDefinition.getComment() != null ? queryDefinition.getComment() : queryDefinition.getName() ); initQueryFromNamedDefinition( query, queryDefinition ); applyQuerySettingsAndHints( query ); return query; }
String resultSetRef = ref == null ? null : ref.getValue(); if ( StringHelper.isNotEmpty( resultSetRef ) ) { namedQuery = new NamedSQLQueryDefinition( queryName, queryElem.getText(), namedQuery = new NamedSQLQueryDefinition( queryName, queryElem.getText(), LOG.debugf( "Named SQL query: %s -> %s", namedQuery.getName(), namedQuery.getQueryString() );
if ( !BinderHelper.isEmptyAnnotationValue( resultSetMapping ) ) { query = new NamedSQLQueryDefinition( queryAnn.name(), queryName, query = new NamedSQLQueryDefinition( queryAnn.name(), queryName, mappings.addDefaultSQLQuery( query.getName(), query ); mappings.addSQLQuery( query.getName(), query );
@Override public void addNamedNativeQuery(NamedSQLQueryDefinition def) { if ( def == null || def.getName() == null ) { throw new IllegalArgumentException( "Named native query definition object or name is null: " + def.getQueryString() ); } namedNativeQueryDefs.put( def.getName(), def ); }
public NamedQueryRepository( Iterable<NamedQueryDefinition> namedQueryDefinitions, Iterable<NamedSQLQueryDefinition> namedSqlQueryDefinitions, Iterable<ResultSetMappingDefinition> namedSqlResultSetMappings, Map<String, ProcedureCallMemento> namedProcedureCalls) { final HashMap<String, NamedQueryDefinition> namedQueryDefinitionMap = new HashMap<String, NamedQueryDefinition>(); for ( NamedQueryDefinition namedQueryDefinition : namedQueryDefinitions ) { namedQueryDefinitionMap.put( namedQueryDefinition.getName(), namedQueryDefinition ); } this.namedQueryDefinitionMap = Collections.unmodifiableMap( namedQueryDefinitionMap ); final HashMap<String, NamedSQLQueryDefinition> namedSqlQueryDefinitionMap = new HashMap<String, NamedSQLQueryDefinition>(); for ( NamedSQLQueryDefinition namedSqlQueryDefinition : namedSqlQueryDefinitions ) { namedSqlQueryDefinitionMap.put( namedSqlQueryDefinition.getName(), namedSqlQueryDefinition ); } this.namedSqlQueryDefinitionMap = Collections.unmodifiableMap( namedSqlQueryDefinitionMap ); final HashMap<String, ResultSetMappingDefinition> namedSqlResultSetMappingMap = new HashMap<String, ResultSetMappingDefinition>(); for ( ResultSetMappingDefinition resultSetMappingDefinition : namedSqlResultSetMappings ) { namedSqlResultSetMappingMap.put( resultSetMappingDefinition.getName(), resultSetMappingDefinition ); } this.namedSqlResultSetMappingMap = Collections.unmodifiableMap( namedSqlResultSetMappingMap ); this.procedureCallMementoMap = Collections.unmodifiableMap( namedProcedureCalls ); }
@Override public Query getNamedSQLQuery(String queryName) throws MappingException { errorIfClosed(); NamedSQLQueryDefinition nsqlqd = factory.getNamedSQLQuery( queryName ); if ( nsqlqd==null ) { throw new MappingException( "Named SQL query not known: " + queryName ); } Query query = new SQLQueryImpl( nsqlqd, this, factory.getQueryPlanCache().getSQLParameterMetadata( nsqlqd.getQueryString() ) ); query.setComment( "named native SQL query " + queryName ); initQuery( query, nsqlqd ); return query; }
log.debugf( "Checking named SQL query: %s", namedSQLQueryDefinition.getName() ); if ( namedSQLQueryDefinition.getResultSetRef() != null ) { ResultSetMappingDefinition definition = getResultSetMappingDefinition( namedSQLQueryDefinition.getResultSetRef() ); if ( definition == null ) { throw new MappingException( "Unable to find resultset-ref definition: " + namedSQLQueryDefinition.getResultSetRef() ); namedSQLQueryDefinition.getQueryString(), definition.getQueryReturns(), namedSQLQueryDefinition.getQuerySpaces() ); namedSQLQueryDefinition.getQueryString(), namedSQLQueryDefinition.getQueryReturns(), namedSQLQueryDefinition.getQuerySpaces() ); errors.put( namedSQLQueryDefinition.getName(), e );