From d2ccafd0d087d3eee4707355cec43570e0191be4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9C=B0=E5=B9=B3=E7=BA=BF?= <22250530@qq.com> Date: Tue, 27 Oct 2015 09:03:40 +0800 Subject: [PATCH] --- .../wentch/redkale/source/FilterBeanNode.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/com/wentch/redkale/source/FilterBeanNode.java b/src/com/wentch/redkale/source/FilterBeanNode.java index a001197f3..c5695a260 100644 --- a/src/com/wentch/redkale/source/FilterBeanNode.java +++ b/src/com/wentch/redkale/source/FilterBeanNode.java @@ -328,7 +328,7 @@ final class FilterBeanNode extends FilterNode { return result; } - private void putForeignPredicate(final Map foreign, FilterBean bean) { + private void putForeignPredicate(final Map foreign, FilterBean bean) { if (this.foreignEntity == null) return; final Serializable val = getValue(bean); Predicate filter = (val == null && express != ISNULL && express != ISNOTNULL) ? ((t) -> signand) : super.createFilterPredicate(this.columnAttribute, val); @@ -336,10 +336,33 @@ final class FilterBeanNode extends FilterNode { Predicate p = foreign.get(this.foreignEntity); if (p == null) { foreign.put(foreignEntity, filter); - } else if (signand) { - p.and(filter); } else { - p.or(filter); + final Predicate one = p; + final Predicate two = filter; + p = signand ? new Predicate() { + + @Override + public boolean test(T t) { + return one.test(t) && two.test(t); + } + + @Override + public String toString() { + return "(" + one + " AND " + two + ")"; + } + } : new Predicate() { + + @Override + public boolean test(T t) { + return one.test(t) || two.test(t); + } + + @Override + public String toString() { + return "(" + one + " OR " + two + ")"; + } + }; + foreign.put(foreignEntity, p); } }