Zheng Jie 2023-07-05 10:22:39 +08:00
parent cf3655adf4
commit b46d50fef1
1 changed files with 31 additions and 27 deletions

View File

@ -53,6 +53,7 @@ public class QueryHelp {
} }
} }
try { try {
Map<String, Join> joinKey = new HashMap<>();
List<Field> fields = getAllFields(query.getClass(), new ArrayList<>()); List<Field> fields = getAllFields(query.getClass(), new ArrayList<>());
for (Field field : fields) { for (Field field : fields) {
boolean accessible = field.isAccessible(); boolean accessible = field.isAccessible();
@ -75,40 +76,43 @@ public class QueryHelp {
String[] blurrys = blurry.split(","); String[] blurrys = blurry.split(",");
List<Predicate> orPredicate = new ArrayList<>(); List<Predicate> orPredicate = new ArrayList<>();
for (String s : blurrys) { for (String s : blurrys) {
orPredicate.add(cb.like(root.get(s) orPredicate.add(cb.like(root.get(s).as(String.class), "%" + val.toString() + "%"));
.as(String.class), "%" + val.toString() + "%"));
} }
Predicate[] p = new Predicate[orPredicate.size()]; Predicate[] p = new Predicate[orPredicate.size()];
list.add(cb.or(orPredicate.toArray(p))); list.add(cb.or(orPredicate.toArray(p)));
continue; continue;
} }
if (ObjectUtil.isNotEmpty(joinName)) { if (ObjectUtil.isNotEmpty(joinName)) {
String[] joinNames = joinName.split(">"); join = joinKey.get(joinName);
for (String name : joinNames) { if(join == null){
switch (q.join()) { String[] joinNames = joinName.split(">");
case LEFT: for (String name : joinNames) {
if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ switch (q.join()) {
join = join.join(name, JoinType.LEFT); case LEFT:
} else { if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){
join = root.join(name, JoinType.LEFT); join = join.join(name, JoinType.LEFT);
} } else {
break; join = root.join(name, JoinType.LEFT);
case RIGHT: }
if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ break;
join = join.join(name, JoinType.RIGHT); case RIGHT:
} else { if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){
join = root.join(name, JoinType.RIGHT); join = join.join(name, JoinType.RIGHT);
} } else {
break; join = root.join(name, JoinType.RIGHT);
case INNER: }
if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){ break;
join = join.join(name, JoinType.INNER); case INNER:
} else { if(ObjectUtil.isNotNull(join) && ObjectUtil.isNotNull(val)){
join = root.join(name, JoinType.INNER); join = join.join(name, JoinType.INNER);
} } else {
break; join = root.join(name, JoinType.INNER);
default: break; }
break;
default: break;
}
} }
joinKey.put(joinName, join);
} }
} }
switch (q.type()) { switch (q.type()) {