use of org.hibernate.engine.query.spi.EntityGraphQueryHint in project hibernate-orm by hibernate.
the class AbstractProducedQuery method setHint.
@Override
@SuppressWarnings("unchecked")
public QueryImplementor setHint(String hintName, Object value) {
getProducer().checkOpen(true);
boolean applied = false;
try {
if (HINT_TIMEOUT.equals(hintName)) {
applied = applyTimeoutHint(ConfigurationHelper.getInteger(value));
} else if (SPEC_HINT_TIMEOUT.equals(hintName)) {
// convert milliseconds to seconds
int timeout = (int) Math.round(ConfigurationHelper.getInteger(value).doubleValue() / 1000.0);
applied = applyTimeoutHint(timeout);
} else if (JPA_LOCK_TIMEOUT.equals(hintName)) {
applied = applyLockTimeoutHint(ConfigurationHelper.getInteger(value));
} else if (HINT_COMMENT.equals(hintName)) {
applied = applyCommentHint((String) value);
} else if (HINT_FETCH_SIZE.equals(hintName)) {
applied = applyFetchSizeHint(ConfigurationHelper.getInteger(value));
} else if (HINT_CACHEABLE.equals(hintName)) {
applied = applyCacheableHint(ConfigurationHelper.getBoolean(value));
} else if (HINT_CACHE_REGION.equals(hintName)) {
applied = applyCacheRegionHint((String) value);
} else if (HINT_READONLY.equals(hintName)) {
applied = applyReadOnlyHint(ConfigurationHelper.getBoolean(value));
} else if (HINT_FLUSH_MODE.equals(hintName)) {
applied = applyFlushModeHint(ConfigurationHelper.getFlushMode(value));
} else if (HINT_CACHE_MODE.equals(hintName)) {
applied = applyCacheModeHint(ConfigurationHelper.getCacheMode(value));
} else if (JPA_SHARED_CACHE_RETRIEVE_MODE.equals(hintName)) {
final CacheRetrieveMode retrieveMode = value != null ? CacheRetrieveMode.valueOf(value.toString()) : null;
applied = applyJpaCacheRetrieveMode(retrieveMode);
} else if (JPA_SHARED_CACHE_STORE_MODE.equals(hintName)) {
final CacheStoreMode storeMode = value != null ? CacheStoreMode.valueOf(value.toString()) : null;
applied = applyJpaCacheStoreMode(storeMode);
} else if (QueryHints.HINT_NATIVE_LOCKMODE.equals(hintName)) {
applied = applyNativeQueryLockMode(value);
} else if (hintName.startsWith(ALIAS_SPECIFIC_LOCK_MODE)) {
if (canApplyAliasSpecificLockModeHints()) {
// extract the alias
final String alias = hintName.substring(ALIAS_SPECIFIC_LOCK_MODE.length() + 1);
// determine the LockMode
try {
final LockMode lockMode = LockModeTypeHelper.interpretLockMode(value);
applyAliasSpecificLockModeHint(alias, lockMode);
} catch (Exception e) {
log.unableToDetermineLockModeValue(hintName, value);
applied = false;
}
} else {
applied = false;
}
} else if (HINT_FETCHGRAPH.equals(hintName) || HINT_LOADGRAPH.equals(hintName)) {
if (value instanceof EntityGraphImpl) {
applyEntityGraphQueryHint(new EntityGraphQueryHint(hintName, (EntityGraphImpl) value));
} else {
log.warnf("The %s hint was set, but the value was not an EntityGraph!", hintName);
}
applied = true;
} else if (HINT_FOLLOW_ON_LOCKING.equals(hintName)) {
applied = applyFollowOnLockingHint(ConfigurationHelper.getBoolean(value));
} else if (QueryHints.HINT_PASS_DISTINCT_THROUGH.equals(hintName)) {
applied = applyPassDistinctThrough(ConfigurationHelper.getBoolean(value));
} else {
log.ignoringUnrecognizedQueryHint(hintName);
}
} catch (ClassCastException e) {
throw new IllegalArgumentException("Value for hint");
}
if (!applied) {
log.debugf("Skipping unsupported query hint [%s]", hintName);
}
return this;
}
Aggregations