From b46d50fef102facb10502618c30eefb72b8667ce Mon Sep 17 00:00:00 2001 From: Zheng Jie <201507802@qq.com> Date: Wed, 5 Jul 2023 10:22:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=85=B3=E8=81=94=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=87=BA=E7=8E=B0=E9=87=8D=E5=A4=8D=E7=9A=84join?= =?UTF-8?q?=EF=BC=9Ahttps://github.com/elunez/eladmin/issues/655?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close https://github.com/elunez/eladmin/issues/655 --- .../java/me/zhengjie/utils/QueryHelp.java | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java index 5b542faa..587ece98 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/QueryHelp.java @@ -53,6 +53,7 @@ public class QueryHelp { } } try { + Map joinKey = new HashMap<>(); List fields = getAllFields(query.getClass(), new ArrayList<>()); for (Field field : fields) { boolean accessible = field.isAccessible(); @@ -75,40 +76,43 @@ public class QueryHelp { String[] blurrys = blurry.split(","); List orPredicate = new ArrayList<>(); for (String s : blurrys) { - orPredicate.add(cb.like(root.get(s) - .as(String.class), "%" + val.toString() + "%")); + orPredicate.add(cb.like(root.get(s).as(String.class), "%" + val.toString() + "%")); } Predicate[] p = new Predicate[orPredicate.size()]; list.add(cb.or(orPredicate.toArray(p))); continue; } if (ObjectUtil.isNotEmpty(joinName)) { - String[] joinNames = joinName.split(">"); - for (String name : joinNames) { - switch (q.join()) { - case LEFT: - if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ - join = join.join(name, JoinType.LEFT); - } else { - join = root.join(name, JoinType.LEFT); - } - break; - case RIGHT: - if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ - join = join.join(name, JoinType.RIGHT); - } else { - join = root.join(name, JoinType.RIGHT); - } - break; - case INNER: - if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ - join = join.join(name, JoinType.INNER); - } else { - join = root.join(name, JoinType.INNER); - } - break; - default: break; + join = joinKey.get(joinName); + if(join == null){ + String[] joinNames = joinName.split(">"); + for (String name : joinNames) { + switch (q.join()) { + case LEFT: + if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ + join = join.join(name, JoinType.LEFT); + } else { + join = root.join(name, JoinType.LEFT); + } + break; + case RIGHT: + if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ + join = join.join(name, JoinType.RIGHT); + } else { + join = root.join(name, JoinType.RIGHT); + } + break; + case INNER: + if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ + join = join.join(name, JoinType.INNER); + } else { + join = root.join(name, JoinType.INNER); + } + break; + default: break; + } } + joinKey.put(joinName, join); } } switch (q.type()) {