Deprecate outdated HibernateTemplate operations in favor of lambdas
Issue: SPR-16426
This commit is contained in:
parent
c718ddf7b0
commit
4e194c3fbe
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2015 the original author or authors.
|
* Copyright 2002-2018 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -30,14 +30,37 @@ import org.springframework.dao.DataAccessException;
|
||||||
import org.springframework.lang.Nullable;
|
import org.springframework.lang.Nullable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface that specifies a basic set of Hibernate operations,
|
* Interface that specifies a common set of Hibernate operations as well as
|
||||||
* implemented by {@link HibernateTemplate}. Not often used, but a useful
|
* a general {@link #execute} method for Session-based lambda expressions.
|
||||||
* option to enhance testability, as it can easily be mocked or stubbed.
|
* Implemented by {@link HibernateTemplate}. Not often used, but a useful option
|
||||||
|
* to enhance testability, as it can easily be mocked or stubbed.
|
||||||
*
|
*
|
||||||
* <p>Defines {@code HibernateTemplate}'s data access methods that
|
* <p>Defines {@code HibernateTemplate}'s data access methods that mirror various
|
||||||
* mirror various {@link org.hibernate.Session} methods. Users are
|
* {@link org.hibernate.Session} methods. Users are strongly encouraged to read the
|
||||||
* strongly encouraged to read the Hibernate {@code Session} javadocs
|
* Hibernate {@code Session} javadocs for details on the semantics of those methods.
|
||||||
* for details on the semantics of those methods.
|
*
|
||||||
|
* <p><b>A deprecation note:</b> While {@link HibernateTemplate} and this operations
|
||||||
|
* interface are being kept around for backwards compatibility in terms of the data
|
||||||
|
* access implementation style in Spring applications, we strongly recommend the use
|
||||||
|
* of native {@link org.hibernate.Session} access code for non-trivial interactions.
|
||||||
|
* This in particular affects parameterized queries where - on Java 8+ - a custom
|
||||||
|
* {@link HibernateCallback} lambda code block with {@code createQuery} and several
|
||||||
|
* {@code setParameter} calls on the {@link org.hibernate.query.Query} interface
|
||||||
|
* is an elegant solution, to be executed via the general {@link #execute} method.
|
||||||
|
* All such operations which benefit from a lambda variant have been marked as
|
||||||
|
* {@code deprecated} on this interface.
|
||||||
|
*
|
||||||
|
* <p><b>A Hibernate compatibility note:</b> {@link HibernateTemplate} and the
|
||||||
|
* operations on this interface generally aim to be applicable across all Hibernate
|
||||||
|
* versions. In terms of binary compatibility, Spring ships a variant for each major
|
||||||
|
* generation of Hibernate (in the present case: Hibernate ORM 5.x). However, due to
|
||||||
|
* refactorings and removals in Hibernate ORM 5.3, some variants - in particular
|
||||||
|
* legacy positional parameters starting from index 0 - do not work anymore.
|
||||||
|
* All affected operations are marked as deprecated; please replace them with the
|
||||||
|
* general {@link #execute} method and custom lambda blocks creating the queries,
|
||||||
|
* ideally setting named parameters through {@link org.hibernate.query.Query}.
|
||||||
|
* <b>Please be aware that deprecated operations are known to work with Hibernate
|
||||||
|
* ORM 5.0-5.2 but may not work with Hibernate ORM 5.3 and higher anymore.</b>
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 4.2
|
* @since 4.2
|
||||||
|
@ -560,116 +583,6 @@ public interface HibernateOperations {
|
||||||
void clear() throws DataAccessException;
|
void clear() throws DataAccessException;
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Convenience finder methods for HQL strings
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute an HQL query, binding a number of values to "?" parameters
|
|
||||||
* in the query string.
|
|
||||||
* @param queryString a query expressed in Hibernate's query language
|
|
||||||
* @param values the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#createQuery
|
|
||||||
*/
|
|
||||||
List<?> find(String queryString, Object... values) throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute an HQL query, binding one value to a ":" named parameter
|
|
||||||
* in the query string.
|
|
||||||
* @param queryString a query expressed in Hibernate's query language
|
|
||||||
* @param paramName the name of the parameter
|
|
||||||
* @param value the value of the parameter
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedParam(String queryString, String paramName, Object value) throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute an HQL query, binding a number of values to ":" named
|
|
||||||
* parameters in the query string.
|
|
||||||
* @param queryString a query expressed in Hibernate's query language
|
|
||||||
* @param paramNames the names of the parameters
|
|
||||||
* @param values the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedParam(String queryString, String[] paramNames, Object[] values) throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute an HQL query, binding the properties of the given bean to
|
|
||||||
* <i>named</i> parameters in the query string.
|
|
||||||
* @param queryString a query expressed in Hibernate's query language
|
|
||||||
* @param valueBean the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Query#setProperties
|
|
||||||
* @see org.hibernate.Session#createQuery
|
|
||||||
*/
|
|
||||||
List<?> findByValueBean(String queryString, Object valueBean) throws DataAccessException;
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Convenience finder methods for named queries
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a named query binding a number of values to "?" parameters
|
|
||||||
* in the query string.
|
|
||||||
* <p>A named query is defined in a Hibernate mapping file.
|
|
||||||
* @param queryName the name of a Hibernate query in a mapping file
|
|
||||||
* @param values the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedQuery(String queryName, Object... values) throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a named query, binding one value to a ":" named parameter
|
|
||||||
* in the query string.
|
|
||||||
* <p>A named query is defined in a Hibernate mapping file.
|
|
||||||
* @param queryName the name of a Hibernate query in a mapping file
|
|
||||||
* @param paramName the name of parameter
|
|
||||||
* @param value the value of the parameter
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
|
|
||||||
throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a named query, binding a number of values to ":" named
|
|
||||||
* parameters in the query string.
|
|
||||||
* <p>A named query is defined in a Hibernate mapping file.
|
|
||||||
* @param queryName the name of a Hibernate query in a mapping file
|
|
||||||
* @param paramNames the names of the parameters
|
|
||||||
* @param values the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)
|
|
||||||
throws DataAccessException;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a named query, binding the properties of the given bean to
|
|
||||||
* ":" named parameters in the query string.
|
|
||||||
* <p>A named query is defined in a Hibernate mapping file.
|
|
||||||
* @param queryName the name of a Hibernate query in a mapping file
|
|
||||||
* @param valueBean the values of the parameters
|
|
||||||
* @return a {@link List} containing the results of the query execution
|
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
|
||||||
* @see org.hibernate.Query#setProperties
|
|
||||||
* @see org.hibernate.Session#getNamedQuery(String)
|
|
||||||
*/
|
|
||||||
List<?> findByNamedQueryAndValueBean(String queryName, Object valueBean) throws DataAccessException;
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Convenience finder methods for detached criteria
|
// Convenience finder methods for detached criteria
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
@ -758,6 +671,140 @@ public interface HibernateOperations {
|
||||||
throws DataAccessException;
|
throws DataAccessException;
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// Convenience finder methods for HQL strings
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an HQL query, binding a number of values to "?" parameters
|
||||||
|
* in the query string.
|
||||||
|
* @param queryString a query expressed in Hibernate's query language
|
||||||
|
* @param values the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#createQuery
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> find(String queryString, Object... values) throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an HQL query, binding one value to a ":" named parameter
|
||||||
|
* in the query string.
|
||||||
|
* @param queryString a query expressed in Hibernate's query language
|
||||||
|
* @param paramName the name of the parameter
|
||||||
|
* @param value the value of the parameter
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedParam(String queryString, String paramName, Object value) throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an HQL query, binding a number of values to ":" named
|
||||||
|
* parameters in the query string.
|
||||||
|
* @param queryString a query expressed in Hibernate's query language
|
||||||
|
* @param paramNames the names of the parameters
|
||||||
|
* @param values the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedParam(String queryString, String[] paramNames, Object[] values) throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute an HQL query, binding the properties of the given bean to
|
||||||
|
* <i>named</i> parameters in the query string.
|
||||||
|
* @param queryString a query expressed in Hibernate's query language
|
||||||
|
* @param valueBean the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Query#setProperties
|
||||||
|
* @see org.hibernate.Session#createQuery
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByValueBean(String queryString, Object valueBean) throws DataAccessException;
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// Convenience finder methods for named queries
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a named query binding a number of values to "?" parameters
|
||||||
|
* in the query string.
|
||||||
|
* <p>A named query is defined in a Hibernate mapping file.
|
||||||
|
* @param queryName the name of a Hibernate query in a mapping file
|
||||||
|
* @param values the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedQuery(String queryName, Object... values) throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a named query, binding one value to a ":" named parameter
|
||||||
|
* in the query string.
|
||||||
|
* <p>A named query is defined in a Hibernate mapping file.
|
||||||
|
* @param queryName the name of a Hibernate query in a mapping file
|
||||||
|
* @param paramName the name of parameter
|
||||||
|
* @param value the value of the parameter
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
|
||||||
|
throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a named query, binding a number of values to ":" named
|
||||||
|
* parameters in the query string.
|
||||||
|
* <p>A named query is defined in a Hibernate mapping file.
|
||||||
|
* @param queryName the name of a Hibernate query in a mapping file
|
||||||
|
* @param paramNames the names of the parameters
|
||||||
|
* @param values the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values)
|
||||||
|
throws DataAccessException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Execute a named query, binding the properties of the given bean to
|
||||||
|
* ":" named parameters in the query string.
|
||||||
|
* <p>A named query is defined in a Hibernate mapping file.
|
||||||
|
* @param queryName the name of a Hibernate query in a mapping file
|
||||||
|
* @param valueBean the values of the parameters
|
||||||
|
* @return a {@link List} containing the results of the query execution
|
||||||
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
|
* @see org.hibernate.Query#setProperties
|
||||||
|
* @see org.hibernate.Session#getNamedQuery(String)
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
List<?> findByNamedQueryAndValueBean(String queryName, Object valueBean) throws DataAccessException;
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Convenience query methods for iteration and bulk updates/deletes
|
// Convenience query methods for iteration and bulk updates/deletes
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
@ -773,7 +820,10 @@ public interface HibernateOperations {
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
* @see org.hibernate.Session#createQuery
|
* @see org.hibernate.Session#createQuery
|
||||||
* @see org.hibernate.Query#iterate
|
* @see org.hibernate.Query#iterate
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
Iterator<?> iterate(String queryString, Object... values) throws DataAccessException;
|
Iterator<?> iterate(String queryString, Object... values) throws DataAccessException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -783,7 +833,10 @@ public interface HibernateOperations {
|
||||||
* @param it the {@code Iterator} to close
|
* @param it the {@code Iterator} to close
|
||||||
* @throws DataAccessException if the {@code Iterator} could not be closed
|
* @throws DataAccessException if the {@code Iterator} could not be closed
|
||||||
* @see org.hibernate.Hibernate#close
|
* @see org.hibernate.Hibernate#close
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
void closeIterator(Iterator<?> it) throws DataAccessException;
|
void closeIterator(Iterator<?> it) throws DataAccessException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -795,7 +848,10 @@ public interface HibernateOperations {
|
||||||
* @throws DataAccessException in case of Hibernate errors
|
* @throws DataAccessException in case of Hibernate errors
|
||||||
* @see org.hibernate.Session#createQuery
|
* @see org.hibernate.Session#createQuery
|
||||||
* @see org.hibernate.Query#executeUpdate
|
* @see org.hibernate.Query#executeUpdate
|
||||||
|
* @deprecated as of 5.0.4, in favor of a custom {@link HibernateCallback}
|
||||||
|
* lambda code block passed to the general {@link #execute} method
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
int bulkUpdate(String queryString, Object... values) throws DataAccessException;
|
int bulkUpdate(String queryString, Object... values) throws DataAccessException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright 2002-2017 the original author or authors.
|
* Copyright 2002-2018 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -67,12 +67,14 @@ import org.springframework.util.ReflectionUtils;
|
||||||
* always be configured as bean in the application context, in the first case
|
* always be configured as bean in the application context, in the first case
|
||||||
* given to the service directly, in the second case to the prepared template.
|
* given to the service directly, in the second case to the prepared template.
|
||||||
*
|
*
|
||||||
* <p><b>NOTE: Hibernate access code can also be coded in plain Hibernate style.
|
* <p><b>NOTE: Hibernate access code can also be coded against the native Hibernate
|
||||||
* Hence, for newly started projects, consider adopting the standard Hibernate
|
* {@link Session}. Hence, for newly started projects, consider adopting the standard
|
||||||
* style of coding data access objects instead, based on
|
* Hibernate style of coding against {@link SessionFactory#getCurrentSession()}.</b>
|
||||||
* {@link SessionFactory#getCurrentSession()}.
|
* Alternatively, use {@link #execute(HibernateCallback)} with Java 8 lambda code blocks
|
||||||
* This HibernateTemplate primarily exists as a migration helper for Hibernate 3
|
* against the callback-provided {@code Session} which results in elegant code as well,
|
||||||
* based data access code, to benefit from bug fixes in Hibernate 5.x.</b>
|
* decoupled from the Hibernate Session lifecycle. The remaining operations on this
|
||||||
|
* HibernateTemplate are deprecated in the meantime and primarily exist as a migration
|
||||||
|
* helper for older Hibernate 3.x/4.x data access code in existing applications.</b>
|
||||||
*
|
*
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @since 4.2
|
* @since 4.2
|
||||||
|
@ -821,131 +823,6 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Convenience finder methods for HQL strings
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> find(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = queryObject(
|
|
||||||
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
if (values != null) {
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
queryObject.setParameter(i, values[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<?> findByNamedParam(String queryString, String paramName, Object value)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
return findByNamedParam(queryString, new String[] {paramName}, new Object[] {value});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> findByNamedParam(final String queryString, final String[] paramNames, final Object[] values)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
if (paramNames.length != values.length) {
|
|
||||||
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
|
|
||||||
}
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = queryObject(
|
|
||||||
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
applyNamedParameterToQuery(queryObject, paramNames[i], values[i]);
|
|
||||||
}
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> findByValueBean(final String queryString, final Object valueBean)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = queryObject(
|
|
||||||
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
queryObject.setProperties(valueBean);
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
// Convenience finder methods for named queries
|
|
||||||
//-------------------------------------------------------------------------
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> findByNamedQuery(final String queryName, @Nullable final Object... values) throws DataAccessException {
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = queryObject(
|
|
||||||
ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
if (values != null) {
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
queryObject.setParameter(i, values[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<?> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
return findByNamedQueryAndNamedParam(queryName, new String[] {paramName}, new Object[] {value});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> findByNamedQueryAndNamedParam(
|
|
||||||
final String queryName, @Nullable final String[] paramNames, @Nullable final Object[] values)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
if (values != null && (paramNames == null || paramNames.length != values.length)) {
|
|
||||||
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
|
|
||||||
}
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = (org.hibernate.Query)
|
|
||||||
nonNull(ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
if (values != null) {
|
|
||||||
for (int i = 0; i < values.length; i++) {
|
|
||||||
applyNamedParameterToQuery(queryObject, paramNames[i], values[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
|
||||||
public List<?> findByNamedQueryAndValueBean(final String queryName, final Object valueBean)
|
|
||||||
throws DataAccessException {
|
|
||||||
|
|
||||||
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
|
||||||
org.hibernate.Query queryObject = queryObject(
|
|
||||||
ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
|
||||||
prepareQuery(queryObject);
|
|
||||||
queryObject.setProperties(valueBean);
|
|
||||||
return queryObject.list();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Convenience finder methods for detached criteria
|
// Convenience finder methods for detached criteria
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
@ -1012,10 +889,144 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// Convenience finder methods for HQL strings
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> find(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = queryObject(
|
||||||
|
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
if (values != null) {
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
queryObject.setParameter(i, values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public List<?> findByNamedParam(String queryString, String paramName, Object value)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
return findByNamedParam(queryString, new String[] {paramName}, new Object[] {value});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> findByNamedParam(final String queryString, final String[] paramNames, final Object[] values)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
if (paramNames.length != values.length) {
|
||||||
|
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
|
||||||
|
}
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = queryObject(
|
||||||
|
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
applyNamedParameterToQuery(queryObject, paramNames[i], values[i]);
|
||||||
|
}
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> findByValueBean(final String queryString, final Object valueBean)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = queryObject(
|
||||||
|
ReflectionUtils.invokeMethod(createQueryMethod, session, queryString));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
queryObject.setProperties(valueBean);
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
// Convenience finder methods for named queries
|
||||||
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> findByNamedQuery(final String queryName, @Nullable final Object... values) throws DataAccessException {
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = queryObject(
|
||||||
|
ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
if (values != null) {
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
queryObject.setParameter(i, values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
public List<?> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
return findByNamedQueryAndNamedParam(queryName, new String[] {paramName}, new Object[] {value});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> findByNamedQueryAndNamedParam(
|
||||||
|
final String queryName, @Nullable final String[] paramNames, @Nullable final Object[] values)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
if (values != null && (paramNames == null || paramNames.length != values.length)) {
|
||||||
|
throw new IllegalArgumentException("Length of paramNames array must match length of values array");
|
||||||
|
}
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = (org.hibernate.Query)
|
||||||
|
nonNull(ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
if (values != null) {
|
||||||
|
for (int i = 0; i < values.length; i++) {
|
||||||
|
applyNamedParameterToQuery(queryObject, paramNames[i], values[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
|
@Override
|
||||||
|
@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
|
||||||
|
public List<?> findByNamedQueryAndValueBean(final String queryName, final Object valueBean)
|
||||||
|
throws DataAccessException {
|
||||||
|
|
||||||
|
return nonNull(executeWithNativeSession((HibernateCallback<List<?>>) session -> {
|
||||||
|
org.hibernate.Query queryObject = queryObject(
|
||||||
|
ReflectionUtils.invokeMethod(getNamedQueryMethod, session, queryName));
|
||||||
|
prepareQuery(queryObject);
|
||||||
|
queryObject.setProperties(valueBean);
|
||||||
|
return queryObject.list();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
// Convenience query methods for iteration and bulk updates/deletes
|
// Convenience query methods for iteration and bulk updates/deletes
|
||||||
//-------------------------------------------------------------------------
|
//-------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings({"rawtypes", "deprecation"})
|
@SuppressWarnings({"rawtypes", "deprecation"})
|
||||||
public Iterator<?> iterate(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
public Iterator<?> iterate(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
||||||
|
@ -1032,6 +1043,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
public void closeIterator(Iterator<?> it) throws DataAccessException {
|
public void closeIterator(Iterator<?> it) throws DataAccessException {
|
||||||
try {
|
try {
|
||||||
|
@ -1042,6 +1054,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings({"rawtypes", "deprecation"})
|
@SuppressWarnings({"rawtypes", "deprecation"})
|
||||||
public int bulkUpdate(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
public int bulkUpdate(final String queryString, @Nullable final Object... values) throws DataAccessException {
|
||||||
|
@ -1083,35 +1096,6 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare the given Query object, applying cache settings and/or
|
|
||||||
* a transaction timeout.
|
|
||||||
* @param queryObject the Query object to prepare
|
|
||||||
* @see #setCacheQueries
|
|
||||||
* @see #setQueryCacheRegion
|
|
||||||
*/
|
|
||||||
@SuppressWarnings({"rawtypes", "deprecation"})
|
|
||||||
protected void prepareQuery(org.hibernate.Query queryObject) {
|
|
||||||
if (isCacheQueries()) {
|
|
||||||
queryObject.setCacheable(true);
|
|
||||||
if (getQueryCacheRegion() != null) {
|
|
||||||
queryObject.setCacheRegion(getQueryCacheRegion());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (getFetchSize() > 0) {
|
|
||||||
queryObject.setFetchSize(getFetchSize());
|
|
||||||
}
|
|
||||||
if (getMaxResults() > 0) {
|
|
||||||
queryObject.setMaxResults(getMaxResults());
|
|
||||||
}
|
|
||||||
|
|
||||||
SessionHolder sessionHolder =
|
|
||||||
(SessionHolder) TransactionSynchronizationManager.getResource(obtainSessionFactory());
|
|
||||||
if (sessionHolder != null && sessionHolder.hasTimeout()) {
|
|
||||||
queryObject.setTimeout(sessionHolder.getTimeToLiveInSeconds());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare the given Criteria object, applying cache settings and/or
|
* Prepare the given Criteria object, applying cache settings and/or
|
||||||
* a transaction timeout.
|
* a transaction timeout.
|
||||||
|
@ -1140,6 +1124,36 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepare the given Query object, applying cache settings and/or
|
||||||
|
* a transaction timeout.
|
||||||
|
* @param queryObject the Query object to prepare
|
||||||
|
* @see #setCacheQueries
|
||||||
|
* @see #setQueryCacheRegion
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
@SuppressWarnings({"rawtypes", "deprecation"})
|
||||||
|
protected void prepareQuery(org.hibernate.Query queryObject) {
|
||||||
|
if (isCacheQueries()) {
|
||||||
|
queryObject.setCacheable(true);
|
||||||
|
if (getQueryCacheRegion() != null) {
|
||||||
|
queryObject.setCacheRegion(getQueryCacheRegion());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (getFetchSize() > 0) {
|
||||||
|
queryObject.setFetchSize(getFetchSize());
|
||||||
|
}
|
||||||
|
if (getMaxResults() > 0) {
|
||||||
|
queryObject.setMaxResults(getMaxResults());
|
||||||
|
}
|
||||||
|
|
||||||
|
SessionHolder sessionHolder =
|
||||||
|
(SessionHolder) TransactionSynchronizationManager.getResource(obtainSessionFactory());
|
||||||
|
if (sessionHolder != null && sessionHolder.hasTimeout()) {
|
||||||
|
queryObject.setTimeout(sessionHolder.getTimeToLiveInSeconds());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply the given name parameter to the given Query object.
|
* Apply the given name parameter to the given Query object.
|
||||||
* @param queryObject the Query object
|
* @param queryObject the Query object
|
||||||
|
@ -1147,6 +1161,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
* @param value the value of the parameter
|
* @param value the value of the parameter
|
||||||
* @throws HibernateException if thrown by the Query object
|
* @throws HibernateException if thrown by the Query object
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
@SuppressWarnings({"rawtypes", "deprecation"})
|
@SuppressWarnings({"rawtypes", "deprecation"})
|
||||||
protected void applyNamedParameterToQuery(org.hibernate.Query queryObject, String paramName, Object value)
|
protected void applyNamedParameterToQuery(org.hibernate.Query queryObject, String paramName, Object value)
|
||||||
throws HibernateException {
|
throws HibernateException {
|
||||||
|
@ -1163,17 +1178,18 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static <T> T nonNull(@Nullable T result) {
|
@Deprecated
|
||||||
Assert.state(result != null, "No result");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings({"rawtypes", "deprecation"})
|
@SuppressWarnings({"rawtypes", "deprecation"})
|
||||||
private static org.hibernate.Query queryObject(@Nullable Object result) {
|
private static org.hibernate.Query queryObject(@Nullable Object result) {
|
||||||
Assert.state(result != null, "No Hibernate Query");
|
Assert.state(result != null, "No Hibernate Query");
|
||||||
return (org.hibernate.Query) result;
|
return (org.hibernate.Query) result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static <T> T nonNull(@Nullable T result) {
|
||||||
|
Assert.state(result != null, "No result");
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invocation handler that suppresses close calls on Hibernate Sessions.
|
* Invocation handler that suppresses close calls on Hibernate Sessions.
|
||||||
|
|
Loading…
Reference in New Issue