mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#1227 - NPE when using L2 Query cache with findOne() or findOneOrEmpty()
This commit is contained in:
@@ -369,7 +369,7 @@ public interface SpiQuery<T> extends Query<T>, TxnProfileEventCodes {
|
||||
/**
|
||||
* Reset AUTO mode to OFF for findList(). Expect explicit cache use with findList().
|
||||
*/
|
||||
void resetBeanCacheAutoMode();
|
||||
void resetBeanCacheAutoMode(boolean findOne);
|
||||
|
||||
/**
|
||||
* Collect natural key data for this query or null if the query does not match
|
||||
|
||||
@@ -1518,12 +1518,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
|
||||
private <T> List<T> findList(Query<T> query, Transaction t, boolean findOne) {
|
||||
|
||||
SpiOrmQueryRequest<T> request = createQueryRequest(Type.LIST, query, t);
|
||||
if (!findOne) {
|
||||
request.resetBeanCacheAutoMode();
|
||||
Object result = request.getFromQueryCache();
|
||||
if (result != null) {
|
||||
return (List<T>) result;
|
||||
}
|
||||
request.resetBeanCacheAutoMode(findOne);
|
||||
Object result = request.getFromQueryCache();
|
||||
if (result != null) {
|
||||
return (List<T>) result;
|
||||
}
|
||||
if ((t == null || !t.isSkipCache()) && request.getFromBeanCache()) {
|
||||
return request.getBeanCacheHits();
|
||||
|
||||
@@ -14,9 +14,12 @@ import io.ebean.event.BeanFindController;
|
||||
import io.ebean.event.BeanQueryAdapter;
|
||||
import io.ebean.event.BeanQueryRequest;
|
||||
import io.ebean.text.json.JsonReadOptions;
|
||||
import io.ebeaninternal.api.BeanCacheResult;
|
||||
import io.ebeaninternal.api.CQueryPlanKey;
|
||||
import io.ebeaninternal.api.HashQuery;
|
||||
import io.ebeaninternal.api.LoadContext;
|
||||
import io.ebeaninternal.api.NaturalKeyQueryData;
|
||||
import io.ebeaninternal.api.NaturalKeySet;
|
||||
import io.ebeaninternal.api.SpiEbeanServer;
|
||||
import io.ebeaninternal.api.SpiQuery;
|
||||
import io.ebeaninternal.api.SpiQuery.Type;
|
||||
@@ -30,9 +33,6 @@ import io.ebeaninternal.server.deploy.DeployPropertyParserMap;
|
||||
import io.ebeaninternal.server.loadcontext.DLoadContext;
|
||||
import io.ebeaninternal.server.query.CQueryPlan;
|
||||
import io.ebeaninternal.server.query.CancelableQuery;
|
||||
import io.ebeaninternal.api.BeanCacheResult;
|
||||
import io.ebeaninternal.api.NaturalKeyQueryData;
|
||||
import io.ebeaninternal.api.NaturalKeySet;
|
||||
import io.ebeaninternal.server.transaction.DefaultPersistenceContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -503,8 +503,8 @@ public final class OrmQueryRequest<T> extends BeanRequest implements BeanQueryRe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetBeanCacheAutoMode() {
|
||||
query.resetBeanCacheAutoMode();
|
||||
public void resetBeanCacheAutoMode(boolean findOne) {
|
||||
query.resetBeanCacheAutoMode(findOne);
|
||||
}
|
||||
|
||||
public boolean isBeanCachePut() {
|
||||
|
||||
@@ -134,7 +134,7 @@ public interface SpiOrmQueryRequest<T> extends DocQueryRequest<T> {
|
||||
/**
|
||||
* Reset Bean cache mode AUTO - require explicit setting for bean cache use with findList().
|
||||
*/
|
||||
void resetBeanCacheAutoMode();
|
||||
void resetBeanCacheAutoMode(boolean findOne);
|
||||
|
||||
/**
|
||||
* Return the Database platform like clause.
|
||||
|
||||
@@ -1104,12 +1104,12 @@ public class DefaultOrmQuery<T> implements SpiQuery<T> {
|
||||
|
||||
@Override
|
||||
public boolean isBeanCachePut() {
|
||||
return beanDescriptor.isBeanCaching() && useBeanCache.isPut();
|
||||
return useBeanCache.isPut() && beanDescriptor.isBeanCaching();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isBeanCacheGet() {
|
||||
return beanDescriptor.isBeanCaching() && useBeanCache.isGet();
|
||||
return useBeanCache.isGet() && beanDescriptor.isBeanCaching() ;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1118,9 +1118,11 @@ public class DefaultOrmQuery<T> implements SpiQuery<T> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void resetBeanCacheAutoMode() {
|
||||
public void resetBeanCacheAutoMode(boolean findOne) {
|
||||
if (useBeanCache == CacheMode.AUTO) {
|
||||
useBeanCache = CacheMode.OFF;
|
||||
if (!findOne || useQueryCache != CacheMode.OFF) {
|
||||
useBeanCache = CacheMode.OFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user