org.apache.openjpa.persistence
Class HintHandler
java.lang.Object
org.apache.openjpa.kernel.AbstractHintHandler
org.apache.openjpa.persistence.FetchPlanHintHandler
org.apache.openjpa.persistence.HintHandler
- All Implemented Interfaces:
- Serializable
public class HintHandler
- extends FetchPlanHintHandler
Manages query hint keys and handles their values on behalf of a owning
QueryImpl
. Uses specific knowledge of hint keys declared in
different parts of the system.
This receiver collects hint keys from different parts of the system. The
keys are implicitly or explicitly declared by several different mechanics.
This receiver sets the values on behalf of a owning QueryImpl
based on the its specific knowledge of these keys.
The hint keys from following sources are collected and handled:
1. QueryHints
interface declares hint keys
as public static final fields. These fields are collected by reflection.
The values are handled by invoking methods on the owning QueryImpl
2. Some hint keys are collected from bean-style property names of JDBCFetchPlan
by reflection
and prefixed with openjpa.FetchPlan
.
Their values are used to set the corresponding property of FetchPlan
via reflection
3. Currently defined javax.persistence.*
hint keys have
a equivalent counterpart to one of these FetchPlan keys.
The JPA keys are mapped to equivalent FetchPlan hint keys.
4. Some keys directly invoke setters or add listeners to the owning
QueryImpl
. These hint keys are statically declared in
this receiver itself.
5. ProductDerivation may introduce their own query hint keys via ProductDerivation.getSupportedQueryHints()
. Their values are set in the
FetchConfiguration.setHint(String, Object)
A hint key is classified into one of the following three categories:
1. Supported: A key is known to this receiver as collected from different
parts of the system. The value of a supported key is recorded and
available via getHints()
method.
2. Recognized: A key is not known to this receiver but has a prefix which
is known to this receiver. The value of a recognized key is not recorded
but its value is available via FetchConfiguration.getHint(String)
3. Unrecognized: A key is neither supported nor recognized. The value of a
unrecognized key is neither recorded nor set anywhere.
If an incompatible value is supplied for a supported key, a non-fatal
ArgumentException
is raised.
- Since:
- 2.0.0
- Author:
- Pinaki Poddar
- See Also:
- Serialized Form
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
HINT_SUBCLASSES
public static final String HINT_SUBCLASSES
- See Also:
- Constant Field Values
HINT_FILTER_LISTENER
public static final String HINT_FILTER_LISTENER
- See Also:
- Constant Field Values
HINT_FILTER_LISTENERS
public static final String HINT_FILTER_LISTENERS
- See Also:
- Constant Field Values
HINT_AGGREGATE_LISTENER
public static final String HINT_AGGREGATE_LISTENER
- See Also:
- Constant Field Values
HINT_AGGREGATE_LISTENERS
public static final String HINT_AGGREGATE_LISTENERS
- See Also:
- Constant Field Values
getHints
public Map<String,Object> getHints()
- Gets all the recorded hint keys and their values.
getSupportedHints
public Set<String> getSupportedHints()
- Gets all the supported hint keys. The set of supported hint keys is
statically determined by collecting hint keys from the ProductDerivations
and reflecting upon some of the known classes.
addHintKey
public void addHintKey(String key)
- Add a hint key to the set of supported hint keys.
getKnownPrefixes
public Set<String> getKnownPrefixes()
setHint
public void setHint(String key,
Object value)
setHintInternal
protected boolean setHintInternal(String key,
Object value,
boolean validateThrowException)
- Overrides:
setHintInternal
in class FetchPlanHintHandler
hintToKey
protected String hintToKey(String key)
- Overrides:
hintToKey
in class FetchPlanHintHandler
Copyright © 2006-2009 Apache Software Foundation. All Rights Reserved.