mirror of https://github.com/apache/openjpa.git
OPENJPA-959: Allow hink keys be set on facade fetch plan.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@752277 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
dfe19d2f4f
commit
a375ef4fd9
|
@ -19,6 +19,9 @@
|
|||
package org.apache.openjpa.persistence;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.LockModeType;
|
||||
|
||||
import org.apache.openjpa.kernel.FetchConfiguration;
|
||||
|
@ -111,6 +114,27 @@ public interface FetchPlan {
|
|||
* @deprecated use {@link #setQueryResultCacheEnabled} instead.
|
||||
*/
|
||||
public FetchPlan setQueryResultCache(boolean cache);
|
||||
|
||||
/**
|
||||
* Gets the hint for the given key.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public Object getHint(String key);
|
||||
|
||||
/**
|
||||
* Sets the hint for the given key to the given value.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public void setHint(String key, Object value);
|
||||
|
||||
/**
|
||||
* Gets the hint keys and values currently set of this receiver.
|
||||
*
|
||||
* @since 2.0.0
|
||||
*/
|
||||
public Map<String, Object> getHints();
|
||||
|
||||
/**
|
||||
* Returns the names of the fetch groups that this component will use
|
||||
|
|
|
@ -22,6 +22,9 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.LockModeType;
|
||||
|
||||
import org.apache.openjpa.kernel.DelegatingFetchConfiguration;
|
||||
|
@ -268,6 +271,18 @@ public class FetchPlanImpl
|
|||
return this;
|
||||
}
|
||||
|
||||
public Object getHint(String key) {
|
||||
return _fetch.getHint(key);
|
||||
}
|
||||
|
||||
public void setHint(String key, Object value) {
|
||||
_fetch.setHint(key, value);
|
||||
}
|
||||
|
||||
public Map<String, Object> getHints() {
|
||||
return _fetch.getHints();
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
return _fetch.hashCode();
|
||||
}
|
||||
|
|
|
@ -271,12 +271,12 @@ public class HintHandler {
|
|||
|
||||
private void setHintInternal(String key, Object value) {
|
||||
Boolean record = record(key, value);
|
||||
FetchConfiguration fetch = owner.getDelegate().getFetchConfiguration();
|
||||
FetchPlan plan = owner.getFetchPlan();
|
||||
ClassLoader loader = owner.getDelegate().getBroker().getClassLoader();
|
||||
if (record == Boolean.FALSE)
|
||||
return;
|
||||
if (record == null) {
|
||||
fetch.setHint(key, value);
|
||||
plan.setHint(key, value);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
@ -302,25 +302,23 @@ public class HintHandler {
|
|||
owner.addAggregateListener(arr[i]);
|
||||
} else if (isFetchPlanHint(key)) {
|
||||
if (requiresTransaction(key))
|
||||
((FetchPlanImpl)owner.getFetchPlan()).getDelegate()
|
||||
.setHint(key, value);
|
||||
plan.setHint(key, value);
|
||||
else
|
||||
hintToSetter(owner.getFetchPlan(),
|
||||
getFetchPlanProperty(key), value);
|
||||
hintToSetter(plan, getFetchPlanProperty(key), value);
|
||||
} else if (HINT_RESULT_COUNT.equals(key)) {
|
||||
int v = (Integer)Filters.convert(value, Integer.class);
|
||||
if (v < 0)
|
||||
throw new ArgumentException(_loc.get("bad-query-hint-value",
|
||||
key, value), null, null, false);
|
||||
fetch.setHint(key, v);
|
||||
plan.setHint(key, v);
|
||||
} else if (HINT_INVALIDATE_PREPARED_QUERY.equals(key)) {
|
||||
fetch.setHint(key, Filters.convert(value, Boolean.class));
|
||||
plan.setHint(key, Filters.convert(value, Boolean.class));
|
||||
owner.invalidatePreparedQuery();
|
||||
} else if (HINT_IGNORE_PREPARED_QUERY.equals(key)) {
|
||||
fetch.setHint(key, Filters.convert(value, Boolean.class));
|
||||
plan.setHint(key, Filters.convert(value, Boolean.class));
|
||||
owner.ignorePreparedQuery();
|
||||
} else { // default
|
||||
fetch.setHint(key, value);
|
||||
plan.setHint(key, value);
|
||||
}
|
||||
return;
|
||||
} catch (IllegalArgumentException iae) {
|
||||
|
|
Loading…
Reference in New Issue