org.apache.openjpa.persistence
Class AbstractQuery<X>

java.lang.Object
  extended by org.apache.openjpa.persistence.AbstractQuery<X>
All Implemented Interfaces:
Query, TypedQuery<X>, OpenJPAQuery<X>, OpenJPAQuerySPI<X>
Direct Known Subclasses:
QueryImpl

public abstract class AbstractQuery<X>
extends Object
implements OpenJPAQuerySPI<X>

An abstract implementation of the Query interface.


Field Summary
protected  Map<Parameter<?>,Object> _boundParams
           
protected  boolean _convertPositionalParams
           
protected  Map<Object,Parameter<?>> _declaredParams
           
protected  EntityManagerImpl _em
           
protected  QueryMetaData _qmd
           
protected  boolean _relaxBindParameterTypeChecking
           
 
Fields inherited from interface org.apache.openjpa.persistence.OpenJPAQuery
FLUSH_FALSE, FLUSH_TRUE, FLUSH_WITH_CONNECTION, HINT_RESULT_COUNT, OP_DELETE, OP_SELECT, OP_UPDATE
 
Constructor Summary
AbstractQuery(QueryMetaData qmd, EntityManagerImpl em)
           
 
Method Summary
(package private)  void assertBound(Parameter<?> param)
           
protected abstract  void assertOpen()
           
(package private)  Object assertValueAssignable(Parameter<?> param, Object v)
          Convert the given value to match the given parameter type, if possible.
(package private)  void bindValue(Parameter<?> param, Object value)
          Binds the given value to the given parameter.
(package private)  int calculateMaxKey(Set<Integer> p)
          Calculate the maximum value of the given set.
(package private)  void clearBinding()
           
(package private)  Object convertTemporalType(Calendar value, TemporalType type)
           
(package private)  Object convertTemporalType(Date value, TemporalType type)
          Converts the given Date to a value corresponding to given temporal type.
 void declareParameter(Object key, Parameter<?> param)
          Declares the given parameter for this query.
 Set<?> getBoundParameterKeys()
          Gets the parameter keys bound with this query.
 Set<?> getDeclaredParameterKeys()
          Gets the declared parameter keys in the given query.
<T> Set<T>
getDeclaredParameterKeys(Class<T> keyType)
           
 Map<Object,Parameter<?>> getDeclaredParameters()
          Gets the parameter instances declared in this query.
 Map<String,Object> getNamedParameters()
          Gets the value of all the named parameters.
 Parameter<?> getParameter(int pos)
          Get the positional parameter with the given position.
<T> Parameter<T>
getParameter(int pos, Class<T> type)
          Get the positional parameter with the given position and type.
 Parameter<?> getParameter(String name)
          Get the parameter object corresponding to the declared parameter of the given name.
<T> Parameter<T>
getParameter(String name, Class<T> type)
          Get the parameter of the given name and type.
 Set<Parameter<?>> getParameters()
          Gets the parameters declared in this query.
 Object getParameterValue(int pos)
          Return the value bound to the parameter.
<T> T
getParameterValue(Parameter<T> p)
          Return the value bound to the parameter.
 Object getParameterValue(String name)
          Return the value bound to the parameter.
(package private)  Map<Object,Object> getParameterValues()
          Gets a map of values of each parameter indexed by their original key.
protected abstract  OrderedMap<Object,Class<?>> getParamTypes()
           
 Object[] getPositionalParameters()
          Gets the array of positional parameter values.
 boolean getRelaxBindParameterTypeChecking()
          Gets whether the type of user-supplied bind parameter value and the type of target persistent property they bind to are checked with strong or weak constraint.
 boolean hasPositionalParameters()
          Affirms if declared parameters use position identifier.
 boolean isBound(Parameter<?> param)
          Affirms if the given parameter is bound to a value for this query.
 boolean isNative()
           
protected abstract  void lock()
           
 OpenJPAQuery<X> setParameter(int position, Calendar value, TemporalType t)
          Sets the value of the given positional parameter after conversion of the given value to the given Temporal Type.
 OpenJPAQuery<X> setParameter(int position, Date value, TemporalType type)
          Sets the value of the given named parameter after conversion of the given value to the given Temporal Type.
 OpenJPAQuery<X> setParameter(int pos, Object value)
          Binds the parameter identified by the given position to the given value.
 TypedQuery<X> setParameter(Parameter<Calendar> p, Calendar cal, TemporalType type)
           
 OpenJPAQuery<X> setParameter(Parameter<Date> p, Date date, TemporalType type)
           
<T> OpenJPAQuery<X>
setParameter(Parameter<T> p, T arg1)
           
 OpenJPAQuery<X> setParameter(String name, Calendar value, TemporalType type)
           
 OpenJPAQuery<X> setParameter(String name, Date value, TemporalType type)
           
 OpenJPAQuery<X> setParameter(String name, Object value)
          Sets the parameter of the given name to the given value.
 OpenJPAQuery<X> setParameters(Map params)
          Sets the values of the parameters from the given Map.
 OpenJPAQuery<X> setParameters(Object... params)
          Binds the given values as positional parameters.
 void setRelaxBindParameterTypeChecking(Object value)
          Sets whether the type of user-supplied bind parameter value and the type of target persistent property they bind to are checked with strong or weak constraint.
protected abstract  void unlock()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.openjpa.persistence.OpenJPAQuerySPI
addAggregateListener, addFilterListener, removeAggregateListener, removeFilterListener
 
Methods inherited from interface org.apache.openjpa.persistence.OpenJPAQuery
closeAll, compile, getCandidateCollection, getDataStoreActions, getEntityManager, getFetchPlan, getFirstResult, getFlushMode, getIgnoreChanges, getLanguage, getMaxResults, getOperation, getQueryString, getResultClass, getSupportedHints, hasSubclasses, setCandidateCollection, setFirstResult, setFlushMode, setHint, setIgnoreChanges, setMaxResults, setResultClass, setSubclasses
 
Methods inherited from interface javax.persistence.TypedQuery
getResultList, getSingleResult, setLockMode
 
Methods inherited from interface javax.persistence.Query
executeUpdate, getHints, getLockMode, unwrap
 

Field Detail

_relaxBindParameterTypeChecking

protected boolean _relaxBindParameterTypeChecking

_convertPositionalParams

protected boolean _convertPositionalParams

_qmd

protected final QueryMetaData _qmd

_em

protected transient EntityManagerImpl _em

_boundParams

protected Map<Parameter<?>,Object> _boundParams

_declaredParams

protected Map<Object,Parameter<?>> _declaredParams
Constructor Detail

AbstractQuery

public AbstractQuery(QueryMetaData qmd,
                     EntityManagerImpl em)
Method Detail

getParameterValues

Map<Object,Object> getParameterValues()
Gets a map of values of each parameter indexed by their original key.

Returns:
an empty map if no parameter is declared for this query. The unbound parameters has a value of null which is indistinguishable from the value being bound to null.

isNative

public boolean isNative()

assertOpen

protected abstract void assertOpen()

lock

protected abstract void lock()

unlock

protected abstract void unlock()

getParamTypes

protected abstract OrderedMap<Object,Class<?>> getParamTypes()
Returns:
a map of parameter name to type for this query.

setParameter

public OpenJPAQuery<X> setParameter(int pos,
                                    Object value)
Binds the parameter identified by the given position to the given value. The parameter are bound to a value in the context of this query. The same parameter may be bound to a different value in the context of another query.
For non-native queries, the given position must be a valid position in the declared parameters.
As native queries may not be parsed and hence their declared parameters may not be known, setting an positional parameter has the side-effect of a positional parameter being declared.

Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>
Parameters:
position - positive, integer position of the parameter
value - an assignment compatible value
Returns:
the same query instance
Throws:
IllegalArgumentException - if position does not correspond to a positional parameter of the query or if the argument is of incorrect type

setParameter

public OpenJPAQuery<X> setParameter(int position,
                                    Calendar value,
                                    TemporalType t)
Sets the value of the given positional parameter after conversion of the given value to the given Temporal Type.

Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>

setParameter

public OpenJPAQuery<X> setParameter(int position,
                                    Date value,
                                    TemporalType type)
Sets the value of the given named parameter after conversion of the given value to the given Temporal Type.

Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>

convertTemporalType

Object convertTemporalType(Date value,
                           TemporalType type)
Converts the given Date to a value corresponding to given temporal type.


convertTemporalType

Object convertTemporalType(Calendar value,
                           TemporalType type)

hasPositionalParameters

public boolean hasPositionalParameters()
Affirms if declared parameters use position identifier.

Specified by:
hasPositionalParameters in interface OpenJPAQuery<X>

getPositionalParameters

public Object[] getPositionalParameters()
Gets the array of positional parameter values. The n-th array element represents (n+1)-th positional parameter. If a parameter has been declared but not bound to a value then the value is null and hence is indistinguishable from the value being actually null. If the parameter indexing is not contiguous then the unspecified parameters are considered as null.

Specified by:
getPositionalParameters in interface OpenJPAQuery<X>

calculateMaxKey

int calculateMaxKey(Set<Integer> p)
Calculate the maximum value of the given set.


setParameters

public OpenJPAQuery<X> setParameters(Object... params)
Binds the given values as positional parameters. The n-th array element value is set to a Parameter with (n+1)-th positional identifier.

Specified by:
setParameters in interface OpenJPAQuery<X>

clearBinding

void clearBinding()

getNamedParameters

public Map<String,Object> getNamedParameters()
Gets the value of all the named parameters. If a parameter has been declared but not bound to a value then the value is null and hence is indistinguishable from the value being actually null.

Specified by:
getNamedParameters in interface OpenJPAQuery<X>

setParameters

public OpenJPAQuery<X> setParameters(Map params)
Sets the values of the parameters from the given Map. The keys of the given map designate the name of the declared parameter.

Specified by:
setParameters in interface OpenJPAQuery<X>

getParameter

public <T> Parameter<T> getParameter(String name,
                                     Class<T> type)
Get the parameter of the given name and type.

Specified by:
getParameter in interface Query
Throws:
IllegalArgumentException - if the parameter of the specified name does not exist or is not assignable to the type
IllegalStateException - if invoked on a native query

getParameter

public <T> Parameter<T> getParameter(int pos,
                                     Class<T> type)
Get the positional parameter with the given position and type.

Specified by:
getParameter in interface Query
Throws:
IllegalArgumentException - if the parameter with the specified position does not exist or is not assignable to the type
IllegalStateException - if invoked on a native query unless the same parameter position is bound already.

getParameterValue

public <T> T getParameterValue(Parameter<T> p)
Return the value bound to the parameter.

Specified by:
getParameterValue in interface Query
Parameters:
param - parameter object
Returns:
parameter value
Throws:
IllegalStateException - if the parameter has not been been bound
IllegalArgumentException - if the parameter does not belong to this query

getParameters

public Set<Parameter<?>> getParameters()
Gets the parameters declared in this query.

Specified by:
getParameters in interface Query

setParameter

public <T> OpenJPAQuery<X> setParameter(Parameter<T> p,
                                        T arg1)
Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>

setParameter

public OpenJPAQuery<X> setParameter(Parameter<Date> p,
                                    Date date,
                                    TemporalType type)
Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>

setParameter

public TypedQuery<X> setParameter(Parameter<Calendar> p,
                                  Calendar cal,
                                  TemporalType type)
Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>

getParameter

public Parameter<?> getParameter(String name)
Get the parameter object corresponding to the declared parameter of the given name. This method is not required to be supported for native queries.

Specified by:
getParameter in interface Query
Throws:
IllegalArgumentException - if the parameter of the specified name does not exist
IllegalStateException - if invoked on a native query

getParameter

public Parameter<?> getParameter(int pos)
Get the positional parameter with the given position. The parameter may just have been declared and not bound to a value.

Specified by:
getParameter in interface Query
Parameters:
position - specified in the user query.
Returns:
parameter object
Throws:
IllegalArgumentException - if the parameter with the given position does not exist

getParameterValue

public Object getParameterValue(String name)
Return the value bound to the parameter.

Specified by:
getParameterValue in interface Query
Parameters:
name - name of the parameter
Returns:
parameter value
Throws:
IllegalStateException - if this parameter has not been bound

getParameterValue

public Object getParameterValue(int pos)
Return the value bound to the parameter.

Specified by:
getParameterValue in interface Query
Parameters:
pos - position of the parameter
Returns:
parameter value
Throws:
IllegalStateException - if this parameter has not been bound

getBoundParameterKeys

public Set<?> getBoundParameterKeys()
Gets the parameter keys bound with this query. Parameter key can be Integer, String or a ParameterExpression itself but all parameters keys of a particular query are of the same type.


getDeclaredParameterKeys

public Set<?> getDeclaredParameterKeys()
Gets the declared parameter keys in the given query. This information is only available after the query has been parsed. As native language queries are not parsed, this information is not available for them.

Returns:
set of parameter identifiers in a parsed query

getDeclaredParameterKeys

public <T> Set<T> getDeclaredParameterKeys(Class<T> keyType)

getDeclaredParameters

public Map<Object,Parameter<?>> getDeclaredParameters()
Gets the parameter instances declared in this query. All parameter keys are of the same type. It is not allowed to mix keys of different type such as named and positional keys. For string-based queries, the parser supplies the information about the declared parameters as a LinkedMap of expected parameter value type indexed by parameter identifier. For non string-based queries that a facade itself may construct (e.g. CriteriaQuery), the parameters must be declared by the caller. This receiver constructs concrete Parameter instances from the given parameter identifiers.

Returns:
a Map where the key represents the original identifier of the parameter (can be a String, Integer or a ParameterExpression itself) and the value is the concrete Parameter instance either constructed as a result of this call or supplied by declaring the parameter explicitly via #declareParameter(Parameter).

declareParameter

public void declareParameter(Object key,
                             Parameter<?> param)
Declares the given parameter for this query. Used by non-string based queries that are constructed by the facade itself rather than OpenJPA parsing the query to detect the declared parameters.

Parameters:
key - this is the key to identify the parameter later in the context of this query. Valid key types are Integer, String or ParameterExpression itself.
the - parameter instance to be declared

isBound

public boolean isBound(Parameter<?> param)
Affirms if the given parameter is bound to a value for this query.

Specified by:
isBound in interface Query

assertBound

void assertBound(Parameter<?> param)

bindValue

void bindValue(Parameter<?> param,
               Object value)
Binds the given value to the given parameter. Validates if the parameter can accept the value by its type.


setParameter

public OpenJPAQuery<X> setParameter(String name,
                                    Calendar value,
                                    TemporalType type)
Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>

setParameter

public OpenJPAQuery<X> setParameter(String name,
                                    Date value,
                                    TemporalType type)
Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>

setParameter

public OpenJPAQuery<X> setParameter(String name,
                                    Object value)
Sets the parameter of the given name to the given value.

Specified by:
setParameter in interface Query
Specified by:
setParameter in interface TypedQuery<X>
Specified by:
setParameter in interface OpenJPAQuery<X>

assertValueAssignable

Object assertValueAssignable(Parameter<?> param,
                             Object v)
Convert the given value to match the given parameter type, if possible.

Parameters:
param - a query parameter
v - a user-supplied value for the parameter

getRelaxBindParameterTypeChecking

public boolean getRelaxBindParameterTypeChecking()
Description copied from interface: OpenJPAQuery
Gets whether the type of user-supplied bind parameter value and the type of target persistent property they bind to are checked with strong or weak constraint.

Specified by:
getRelaxBindParameterTypeChecking in interface OpenJPAQuery<X>
Returns:
the booelan state. False by default, i.e. the type of a bind parameter value is checked strongly against the target property type.

setRelaxBindParameterTypeChecking

public void setRelaxBindParameterTypeChecking(Object value)
Description copied from interface: OpenJPAQuery
Sets whether the type of user-supplied bind parameter value and the type of target persistent property they bind to are checked with strong or weak constraint.
The same can be set via hint without puncturing standard JPA API.

Specified by:
setRelaxBindParameterTypeChecking in interface OpenJPAQuery<X>
Parameters:
value - a String or Boolean value.
See Also:
Filters.canConvert(Class, Class, boolean), Filters.convert(Object, Class, boolean)


Copyright © 2006-2012 Apache Software Foundation. All Rights Reserved.