/*
* 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.engine.spi;
import java.util.List;
import java.util.Map;
import org.hibernate.CacheMode;
import org.hibernate.FlushMode;
import org.hibernate.engine.query.spi.sql.NativeSQLQueryReturn;
Definition of a named native SQL query, defined in the mapping metadata.
Author: Max Andersen, Steve Ebersole
/**
* Definition of a named native SQL query, defined in the mapping metadata.
*
* @author Max Andersen
* @author Steve Ebersole
*/
public class NamedSQLQueryDefinition extends NamedQueryDefinition {
private NativeSQLQueryReturn[] queryReturns;
private final List<String> querySpaces;
private final boolean callable;
private String resultSetRef;
This form was initially used to construct a NamedSQLQueryDefinition from the binder code when a the
result-set mapping information is not explicitly provided in the query definition
(i.e., no resultset-mapping used).
Params: - name – The name of named query
- query – The sql query string
- queryReturns – The in-lined query return definitions
- querySpaces – Any specified query spaces (used for auto-flushing)
- cacheable – Whether the query results are cacheable
- cacheRegion – If cacheable, the region into which to store the results
- timeout – A JDBC-level timeout to be applied
- fetchSize – A JDBC-level fetch-size to be applied
- flushMode – The flush mode to use for this query
- cacheMode – The cache mode to use during execution and subsequent result loading
- readOnly – Whether returned entities should be marked as read-only in the session
- comment – Any sql comment to be applied to the query
- parameterTypes – parameter type map
- callable – Does the query string represent a callable object (i.e., proc)
Deprecated: Use NamedSQLQueryDefinitionBuilder
instead.
/**
* This form was initially used to construct a NamedSQLQueryDefinition from the binder code when a the
* result-set mapping information is not explicitly provided in the query definition
* (i.e., no resultset-mapping used).
*
* @param name The name of named query
* @param query The sql query string
* @param queryReturns The in-lined query return definitions
* @param querySpaces Any specified query spaces (used for auto-flushing)
* @param cacheable Whether the query results are cacheable
* @param cacheRegion If cacheable, the region into which to store the results
* @param timeout A JDBC-level timeout to be applied
* @param fetchSize A JDBC-level fetch-size to be applied
* @param flushMode The flush mode to use for this query
* @param cacheMode The cache mode to use during execution and subsequent result loading
* @param readOnly Whether returned entities should be marked as read-only in the session
* @param comment Any sql comment to be applied to the query
* @param parameterTypes parameter type map
* @param callable Does the query string represent a callable object (i.e., proc)
*
* @deprecated Use {@link NamedSQLQueryDefinitionBuilder} instead.
*/
@Deprecated
public NamedSQLQueryDefinition(
String name,
String query,
NativeSQLQueryReturn[] queryReturns,
List<String> querySpaces,
boolean cacheable,
String cacheRegion,
Integer timeout,
Integer fetchSize,
FlushMode flushMode,
CacheMode cacheMode,
boolean readOnly,
String comment,
Map parameterTypes,
boolean callable) {
this(
name,
query,
cacheable,
cacheRegion,
timeout,
fetchSize,
flushMode,
cacheMode,
readOnly,
comment,
parameterTypes,
null, // firstResult
null, // maxResults
null, // resultSetRef
querySpaces,
callable,
queryReturns
);
}
This form was initially used to construct a NamedSQLQueryDefinition from the binder code when a
resultset-mapping reference is used.
Params: - name – The name of named query
- query – The sql query string
- resultSetRef – The resultset-mapping name
- querySpaces – Any specified query spaces (used for auto-flushing)
- cacheable – Whether the query results are cacheable
- cacheRegion – If cacheable, the region into which to store the results
- timeout – A JDBC-level timeout to be applied
- fetchSize – A JDBC-level fetch-size to be applied
- flushMode – The flush mode to use for this query
- cacheMode – The cache mode to use during execution and subsequent result loading
- readOnly – Whether returned entities should be marked as read-only in the session
- comment – Any sql comment to be applied to the query
- parameterTypes – parameter type map
- callable – Does the query string represent a callable object (i.e., proc)
Deprecated: Use NamedSQLQueryDefinitionBuilder
instead.
/**
* This form was initially used to construct a NamedSQLQueryDefinition from the binder code when a
* resultset-mapping reference is used.
*
* @param name The name of named query
* @param query The sql query string
* @param resultSetRef The resultset-mapping name
* @param querySpaces Any specified query spaces (used for auto-flushing)
* @param cacheable Whether the query results are cacheable
* @param cacheRegion If cacheable, the region into which to store the results
* @param timeout A JDBC-level timeout to be applied
* @param fetchSize A JDBC-level fetch-size to be applied
* @param flushMode The flush mode to use for this query
* @param cacheMode The cache mode to use during execution and subsequent result loading
* @param readOnly Whether returned entities should be marked as read-only in the session
* @param comment Any sql comment to be applied to the query
* @param parameterTypes parameter type map
* @param callable Does the query string represent a callable object (i.e., proc)
*
* @deprecated Use {@link NamedSQLQueryDefinitionBuilder} instead.
*/
@Deprecated
public NamedSQLQueryDefinition(
String name,
String query,
String resultSetRef,
List<String> querySpaces,
boolean cacheable,
String cacheRegion,
Integer timeout,
Integer fetchSize,
FlushMode flushMode,
CacheMode cacheMode,
boolean readOnly,
String comment,
Map parameterTypes,
boolean callable) {
this(
name,
query,
cacheable,
cacheRegion,
timeout,
fetchSize,
flushMode,
cacheMode,
readOnly,
comment,
parameterTypes,
null, // firstResult
null, // maxResults
resultSetRef,
querySpaces,
callable,
null // queryReturns
);
}
NamedSQLQueryDefinition(
String name,
String query,
boolean cacheable,
String cacheRegion,
Integer timeout,
Integer fetchSize,
FlushMode flushMode,
CacheMode cacheMode,
boolean readOnly,
String comment,
Map parameterTypes,
Integer firstResult,
Integer maxResults,
String resultSetRef,
List<String> querySpaces,
boolean callable,
NativeSQLQueryReturn[] queryReturns) {
super(
name,
query.trim(), /* trim done to workaround stupid oracle bug that cant handle whitespaces before a { in a sp */
cacheable,
cacheRegion,
timeout,
null, // lockOptions
fetchSize,
flushMode,
cacheMode,
readOnly,
comment,
parameterTypes,
firstResult,
maxResults
);
this.resultSetRef = resultSetRef;
this.querySpaces = querySpaces;
this.callable = callable;
this.queryReturns = queryReturns;
}
public NativeSQLQueryReturn[] getQueryReturns() {
return queryReturns;
}
public List<String> getQuerySpaces() {
return querySpaces;
}
public boolean isCallable() {
return callable;
}
public String getResultSetRef() {
return resultSetRef;
}
@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()
);
}
public void addQueryReturns(NativeSQLQueryReturn[] queryReturnsToAdd) {
if ( queryReturnsToAdd != null && queryReturnsToAdd.length > 0 ) {
int initialQueryReturnsLength = 0;
if ( this.queryReturns != null ) {
initialQueryReturnsLength = this.queryReturns.length;
}
NativeSQLQueryReturn[] allQueryReturns = new NativeSQLQueryReturn[initialQueryReturnsLength + queryReturnsToAdd.length];
int i = 0;
for ( i = 0; i < initialQueryReturnsLength; i++ ) {
allQueryReturns[i] = this.queryReturns[i];
}
for ( int j = 0; j < queryReturnsToAdd.length; j++ ) {
allQueryReturns[i] = queryReturnsToAdd[j];
i++;
}
this.queryReturns = allQueryReturns;
}
}
}