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:
Pinaki Poddar 2009-03-10 21:42:33 +00:00
parent dfe19d2f4f
commit a375ef4fd9
3 changed files with 47 additions and 10 deletions

View File

@ -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

View File

@ -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();
}

View File

@ -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) {