- java.lang.Object
-
- org.eclipse.persistence.internal.jpa.QueryImpl
-
- Direct Known Subclasses:
EJBQueryImpl,StoredProcedureQueryImpl
public class QueryImpl extends Object
Concrete JPA query class. The JPA query wraps a DatabaseQuery which is executed.
-
-
Field Summary
Fields Modifier and Type Field Description protected DatabaseQuerydatabaseQueryWrapped native query.protected EntityManagerImplentityManagerprotected intfirstResultIndexprotected booleanisSharedStores if the wrapped query is shared, and requires cloning before being changed.protected jakarta.persistence.LockModeTypelockModeprotected intmaxResultsprotected Map<String,jakarta.persistence.Parameter<?>>parametersprotected Map<String,Object>parameterValuesprotected StringqueryNamestatic intUNDEFINED
-
Constructor Summary
Constructors Modifier Constructor Description protectedQueryImpl(EntityManagerImpl entityManager)Base constructor for EJBQueryImpl.QueryImpl(DatabaseQuery query, EntityManagerImpl entityManager)Create an EJBQueryImpl with a DatabaseQuery.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected static voidapplyArguments(StoredProcedureCall call, DatabaseQuery query)Define the query arguments based on the procedure call.protected static DatabaseQueryapplyHints(Map<String,Object> hints, DatabaseQuery query, ClassLoader classLoader, AbstractSession session)Set implementation-specific hints.protected voidcloneSharedQuery()If the query was from the jpql parse cache it must be cloned before being modified.voidclose()This method should be called to close any left over open connection to the database (if there is one).protected ObjectconvertTemporalType(Object value, jakarta.persistence.TemporalType type)Convert the given object to the class represented by the given temporal type.protected ObjectexecuteReadQuery()Execute a ReadQuery by assigning the stored parameter values and running it in the databaseintexecuteUpdate()Execute an update or delete statement.protected SessiongetActiveSession()DatabaseQuerygetDatabaseQuery()Return the wrappedDatabaseQueryensuring that if itisSharedit is cloned before returning to prevent corruption of the query cache.DatabaseQuerygetDatabaseQueryInternal()INTERNAL: Return the cached database query for this EJBQueryImpl.protected RuntimeExceptiongetDetailedException(DatabaseException e)Given a DatabaseException, this method will determine if we should throw a different more specific exception like a lock timeout exception.JpaEntityManagergetEntityManager()Return the entityManager this query is tied to.intgetFirstResult()jakarta.persistence.FlushModeTypegetFlushMode()Map<String,Object>getHints()protected Map<String,jakarta.persistence.Parameter<?>>getInternalParameters()Return the internal map of parameters.jakarta.persistence.LockModeTypegetLockMode()Get the current lock mode for the query.intgetMaxResults()intgetMaxResultsInternal()jakarta.persistence.Parameter<?>getParameter(int position)<T> jakarta.persistence.Parameter<T>getParameter(int position, Class<T> type)jakarta.persistence.Parameter<?>getParameter(String name)<T> jakarta.persistence.Parameter<T>getParameter(String name, Class<T> type)static StringgetParameterId(jakarta.persistence.Parameter param)Return the identifier of this parameter.Set<jakarta.persistence.Parameter<?>>getParameters()ObjectgetParameterValue(int position)Return the value bound to the positional parameter.<T> TgetParameterValue(jakarta.persistence.Parameter<T> param)ObjectgetParameterValue(String name)Return the value bound to the named parameter.ListgetResultList()Execute the query and return the query results as a List.ObjectgetSingleResult()Execute a SELECT query that returns a single untyped result.Set<String>getSupportedHints()booleanisBound(jakarta.persistence.Parameter<?> param)Return a boolean indicating whether a value has been bound to the parameter.protected booleanisFlushModeAUTO()Spec.protected booleanisValidActualParameter(Object value, Class<?> parameterType)protected voidperformPreQueryFlush()protected List<Object>processParameters()Internal method to add the parameters values to the query prior to execution.protected voidpropagateResultProperties()Configure the firstResult, maxRows and lock mode in the EclipseLink ReadQuery.protected voidsetAsDataModifyQuery()INTERNAL: Change the internal query to data modify query.protected voidsetAsSQLModifyQuery()Internal method to change the wrapped query to a DataModifyQuery if necessary.protected voidsetAsSQLReadQuery()Internal method to change the wrapped query to a DataReadQuery if necessary.voidsetDatabaseQuery(DatabaseQuery query)Replace the cached query with the given query.QueryImplsetFirstResult(int startPosition)Set the position of the first result to retrieve.protected voidsetFirstResultInternal(int startPosition)Set the position of the first result to retrieve.QueryImplsetFlushMode(jakarta.persistence.FlushModeType flushMode)Set the flush mode type to be used for the query execution.protected voidsetHintInternal(String hintName, Object value)Set an implementation-specific hint.QueryImplsetLockMode(jakarta.persistence.LockModeType lockMode)Set the lock mode type to be used for the query execution.QueryImplsetMaxResults(int maxResult)Set the maximum number of results to retrieve.voidsetMaxResultsInternal(int maxResult)Set the maximum number of results to retrieve.protected voidsetParameterInternal(int position, Object value)Bind an argument to a positional parameter.protected voidsetParameterInternal(String name, Object value, boolean isIndex)Bind an argument to a named or indexed parameter.protected voidsetRollbackOnly()protected voidthrowNonUniqueResultException(String message)protected voidthrowNoResultException(String message)StringtoString()<T> Tunwrap(Class<T> cls)Unwrap the query into the JPA implementation classes/interfaces or the underlying native EclipseLink query.
-
-
-
Field Detail
-
UNDEFINED
public static final int UNDEFINED
- See Also:
- Constant Field Values
-
databaseQuery
protected DatabaseQuery databaseQuery
Wrapped native query. The query may beisShared
-
entityManager
protected EntityManagerImpl entityManager
-
queryName
protected String queryName
-
firstResultIndex
protected int firstResultIndex
-
maxResults
protected int maxResults
-
lockMode
protected jakarta.persistence.LockModeType lockMode
-
isShared
protected boolean isShared
Stores if the wrapped query is shared, and requires cloning before being changed.
-
-
Constructor Detail
-
QueryImpl
protected QueryImpl(EntityManagerImpl entityManager)
Base constructor for EJBQueryImpl. Initializes basic variables.
-
QueryImpl
public QueryImpl(DatabaseQuery query, EntityManagerImpl entityManager)
Create an EJBQueryImpl with a DatabaseQuery.
-
-
Method Detail
-
close
public void close()
This method should be called to close any left over open connection to the database (if there is one).
-
setAsDataModifyQuery
protected void setAsDataModifyQuery()
INTERNAL: Change the internal query to data modify query.
-
setAsSQLModifyQuery
protected void setAsSQLModifyQuery()
Internal method to change the wrapped query to a DataModifyQuery if necessary. When created, the query is created as a DataReadQuery as it is unknown if it is a SELECT or UPDATE. Note that this prevents the original named query from every being prepared.
-
setAsSQLReadQuery
protected void setAsSQLReadQuery()
Internal method to change the wrapped query to a DataReadQuery if necessary. This should never occur, but could possibly if the same query was executed as executeUpdate() then as getResultList(). Note that the initial conversion to modify would loose any read settings that had been set.
-
executeReadQuery
protected Object executeReadQuery()
Execute a ReadQuery by assigning the stored parameter values and running it in the database- Returns:
- the results of the query execution
-
executeUpdate
public int executeUpdate()
Execute an update or delete statement.- Returns:
- the number of entities updated or deleted
-
getDatabaseQuery
public DatabaseQuery getDatabaseQuery()
Return the wrappedDatabaseQueryensuring that if itisSharedit is cloned before returning to prevent corruption of the query cache.- See Also:
getDatabaseQueryInternal()
-
getDatabaseQueryInternal
public DatabaseQuery getDatabaseQueryInternal()
INTERNAL: Return the cached database query for this EJBQueryImpl. If the query is a named query and it has not yet been looked up, the query will be looked up and stored as the cached query.
-
getDetailedException
protected RuntimeException getDetailedException(DatabaseException e)
Given a DatabaseException, this method will determine if we should throw a different more specific exception like a lock timeout exception.
-
getEntityManager
public JpaEntityManager getEntityManager()
Return the entityManager this query is tied to.
-
getInternalParameters
protected Map<String,jakarta.persistence.Parameter<?>> getInternalParameters()
Return the internal map of parameters.
-
getLockMode
public jakarta.persistence.LockModeType getLockMode()
Get the current lock mode for the query.- Returns:
- lock mode
- Throws:
IllegalStateException- if not a Java Persistence query language SELECT query
-
getResultList
public List getResultList()
Execute the query and return the query results as a List.- Returns:
- a list of the results
-
getSingleResult
public Object getSingleResult()
Execute a SELECT query that returns a single untyped result.- Returns:
- the result
- Throws:
jakarta.persistence.NoResultException- if there is no resultjakarta.persistence.NonUniqueResultException- if more than one resultIllegalStateException- if called for a Java Persistence query language UPDATE or DELETE statementjakarta.persistence.QueryTimeoutException- if the query execution exceeds the query timeout value set and only the statement is rolled backjakarta.persistence.TransactionRequiredException- if a lock mode other than NONE has been been set and there is no transaction or the persistence context has not been joined to the transactionjakarta.persistence.PessimisticLockException- if pessimistic locking fails and the transaction is rolled backjakarta.persistence.LockTimeoutException- if pessimistic locking fails and only the statement is rolled backjakarta.persistence.PersistenceException- if the query execution exceeds the query timeout value set and the transaction is rolled back
-
processParameters
protected List<Object> processParameters()
Internal method to add the parameters values to the query prior to execution. Returns a list of parameter values in the order the parameters are defined for the databaseQuery.
-
setDatabaseQuery
public void setDatabaseQuery(DatabaseQuery query)
Replace the cached query with the given query.
-
setFirstResult
public QueryImpl setFirstResult(int startPosition)
Set the position of the first result to retrieve.- Parameters:
startPosition- position of the first result, numbered from 0- Returns:
- the same query instance
-
getFirstResult
public int getFirstResult()
- Since:
- Java Persistence API 2.0
- See Also:
Query.getFirstResult()
-
setFlushMode
public QueryImpl setFlushMode(jakarta.persistence.FlushModeType flushMode)
Set the flush mode type to be used for the query execution.
-
setFirstResultInternal
protected void setFirstResultInternal(int startPosition)
Set the position of the first result to retrieve.- Parameters:
startPosition- position of the first result, numbered from 0.
-
applyArguments
protected static void applyArguments(StoredProcedureCall call, DatabaseQuery query)
Define the query arguments based on the procedure call.
-
applyHints
protected static DatabaseQuery applyHints(Map<String,Object> hints, DatabaseQuery query, ClassLoader classLoader, AbstractSession session)
Set implementation-specific hints.- Parameters:
hints- a list of hints to be applied to the queryquery- the query to apply the hints to
-
getParameterId
public static String getParameterId(jakarta.persistence.Parameter param)
Return the identifier of this parameter. This will be the name if it is set, else it will be the position
-
isBound
public boolean isBound(jakarta.persistence.Parameter<?> param)
Return a boolean indicating whether a value has been bound to the parameter.- Parameters:
param- parameter object- Returns:
- boolean indicating whether parameter has been bound
-
isFlushModeAUTO
protected boolean isFlushModeAUTO()
Spec. 3.5.2: "FlushMode.AUTO is set on the Query object, or if the flush mode setting for the persistence context is AUTO (the default) and a flush mode setting has not been specified for the Query object, the persistence provider is responsible for ensuring that all updates to the state of all entities in the persistence context which could potentially affect the result of the query are visible to the processing of the query."
-
setHintInternal
protected void setHintInternal(String hintName, Object value)
Set an implementation-specific hint. If the hint name is not recognized, it is silently ignored.- Throws:
IllegalArgumentException- if the second argument is not valid for the implementation.
-
setLockMode
public QueryImpl setLockMode(jakarta.persistence.LockModeType lockMode)
Set the lock mode type to be used for the query execution.- Throws:
IllegalStateException- if not a Java Persistence query language SELECT query
-
cloneSharedQuery
protected void cloneSharedQuery()
If the query was from the jpql parse cache it must be cloned before being modified.
-
convertTemporalType
protected Object convertTemporalType(Object value, jakarta.persistence.TemporalType type)
Convert the given object to the class represented by the given temporal type.- Returns:
- an object representing the given TemporalType.
-
setMaxResults
public QueryImpl setMaxResults(int maxResult)
Set the maximum number of results to retrieve.- Returns:
- the same query instance
-
getMaxResults
public int getMaxResults()
- Since:
- Java Persistence API 2.0
- See Also:
Query.getMaxResults()
-
getMaxResultsInternal
public int getMaxResultsInternal()
- Since:
- Java Persistence API 2.0
- See Also:
Query.getMaxResults()
-
setMaxResultsInternal
public void setMaxResultsInternal(int maxResult)
Set the maximum number of results to retrieve.
-
propagateResultProperties
protected void propagateResultProperties()
Configure the firstResult, maxRows and lock mode in the EclipseLink ReadQuery.
-
setParameterInternal
protected void setParameterInternal(int position, Object value)Bind an argument to a positional parameter.
-
setParameterInternal
protected void setParameterInternal(String name, Object value, boolean isIndex)
Bind an argument to a named or indexed parameter.- Parameters:
name- the parameter namevalue- to bindisIndex- defines if index or named
-
isValidActualParameter
protected boolean isValidActualParameter(Object value, Class<?> parameterType)
-
getActiveSession
protected Session getActiveSession()
-
performPreQueryFlush
protected void performPreQueryFlush()
-
setRollbackOnly
protected void setRollbackOnly()
-
throwNoResultException
protected void throwNoResultException(String message)
-
throwNonUniqueResultException
protected void throwNonUniqueResultException(String message)
-
getFlushMode
public jakarta.persistence.FlushModeType getFlushMode()
- Since:
- Java Persistence 2.0
- See Also:
Query.getFlushMode()
-
getHints
public Map<String,Object> getHints()
- Since:
- Java Persistence 2.0
- See Also:
Query.getHints()
-
getParameter
public <T> jakarta.persistence.Parameter<T> getParameter(String name, Class<T> type)
- Since:
- Java Persistence 2.0
- See Also:
Query.getParameter(String, Class)
-
getParameter
public <T> jakarta.persistence.Parameter<T> getParameter(int position, Class<T> type)- Since:
- Java Persistence 2.0
- See Also:
Query.getParameter(int, Class)
-
getParameter
public jakarta.persistence.Parameter<?> getParameter(String name)
- Since:
- Java Persistence 2.0
- See Also:
Query.getParameter(String, Class)
-
getParameter
public jakarta.persistence.Parameter<?> getParameter(int position)
- Since:
- Java Persistence 2.0
- See Also:
Query.getParameter(int, Class)
-
getParameterValue
public <T> T getParameterValue(jakarta.persistence.Parameter<T> param)
- Since:
- Java Persistence 2.0
- See Also:
Query.getParameterValue(Parameter)
-
getParameterValue
public Object getParameterValue(String name)
Return the value bound to the named parameter.- Returns:
- parameter value
- Throws:
IllegalStateException- if the parameter has not been been bound
-
getParameterValue
public Object getParameterValue(int position)
Return the value bound to the positional parameter.- Returns:
- parameter value
- Throws:
IllegalStateException- if the parameter has not been been bound
-
getParameters
public Set<jakarta.persistence.Parameter<?>> getParameters()
- Since:
- Java Persistence 2.0
- See Also:
Query.getParameters()
-
unwrap
public <T> T unwrap(Class<T> cls)
Unwrap the query into the JPA implementation classes/interfaces or the underlying native EclipseLink query.- Since:
- Java Persistence 2.0
- See Also:
Query.unwrap(Class)
-
-