diff --git a/src/com/wentch/redkale/source/DataDefaultSource.java b/src/com/wentch/redkale/source/DataDefaultSource.java index 1a2da1d98..28bbf87ca 100644 --- a/src/com/wentch/redkale/source/DataDefaultSource.java +++ b/src/com/wentch/redkale/source/DataDefaultSource.java @@ -1086,7 +1086,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function cache = info.getCache(); if (cache != null && (info.isVirtualEntity() || cache.isFullLoaded())) { - if (node == null || node.isCacheUseable()) { + if (node == null || node.isCacheUseable(this)) { return cache.getNumberResult(reckon, column, node, bean); } } @@ -1134,7 +1134,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); - if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable())) return cache.find(selects, node, bean); + if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable(this))) return cache.find(selects, node, bean); final Connection conn = createReadSQLConnection(); try { @@ -1278,7 +1278,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); - if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable())) return cache.exists(node, bean); + if (cache != null && cache.isFullLoaded() && (node == null || node.isCacheUseable(this))) return cache.exists(node, bean); final Connection conn = createReadSQLConnection(); try { @@ -1526,7 +1526,7 @@ public final class DataDefaultSource implements DataSource, Nameable, Function cache = info.getCache(); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); if (readcache && cache != null) { - if (node == null || node.isCacheUseable()) { + if (node == null || node.isCacheUseable(this)) { if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " cache query predicate = " + (node == null ? null : node.createPredicate(cache, bean))); Sheet sheet = cache.querySheet(needtotal, selects, flipper, node, bean); if (!sheet.isEmpty() || info.isVirtualEntity() || cache.isFullLoaded()) return sheet; diff --git a/src/com/wentch/redkale/source/FilterBeanNode.java b/src/com/wentch/redkale/source/FilterBeanNode.java index 8f9fc7d3b..e12000a6c 100644 --- a/src/com/wentch/redkale/source/FilterBeanNode.java +++ b/src/com/wentch/redkale/source/FilterBeanNode.java @@ -372,7 +372,7 @@ final class FilterBeanNode extends FilterNode { } @Override - protected boolean isCacheUseable() { + protected boolean isCacheUseable(final Function entityApplyer) { return joinallcached; } diff --git a/src/com/wentch/redkale/source/FilterNode.java b/src/com/wentch/redkale/source/FilterNode.java index 33d8ec5b6..9f2186ebd 100644 --- a/src/com/wentch/redkale/source/FilterNode.java +++ b/src/com/wentch/redkale/source/FilterNode.java @@ -149,9 +149,14 @@ public class FilterNode { /** * 该方法需要重载 * + * @param entityApplyer * @return */ - protected boolean isCacheUseable() { + protected boolean isCacheUseable(final Function entityApplyer) { + if (this.nodes == null) return true; + for (FilterNode node : this.nodes) { + if (!node.isCacheUseable(entityApplyer)) return false; + } return true; } @@ -165,7 +170,7 @@ public class FilterNode { * @return */ protected CharSequence createSQLExpress(final Function func, final EntityInfo info, final FilterBean bean) { - CharSequence sb0 = createElementSQLExpress(info, bean); + CharSequence sb0 = createElementSQLExpress(info, getTabalis(), bean); if (this.nodes == null) return sb0; final StringBuilder rs = new StringBuilder(); rs.append('('); @@ -194,9 +199,9 @@ public class FilterNode { return new FilterNode(column, express, value); } - protected final CharSequence createElementSQLExpress(final EntityInfo info, final FilterBean bean) { + protected final CharSequence createElementSQLExpress(final EntityInfo info, String talis, final FilterBean bean) { if (column == null) return null; - final String talis = getTabalis() == null ? "a" : getTabalis(); + if (talis == null) talis = "a"; if (express == ISNULL || express == ISNOTNULL) { StringBuilder sb = new StringBuilder(); sb.append(info.getSQLColumn(talis, column)).append(' ').append(express.value());