Sfoglia il codice sorgente

考试列表慢sql优化

deason 2 anni fa
parent
commit
84b0deccba

+ 9 - 5
examcloud-core-examwork-api-provider/src/main/java/cn/com/qmth/examcloud/core/examwork/api/controller/ExamController.java

@@ -327,7 +327,7 @@ public class ExamController extends ControllerSupport {
     @DataRule(type = DataRuleType.EXAM)
     @ApiOperation(value = "查询考试批次")
     @GetMapping("queryByNameLike")
-    public List<ExamDomain> query(@RequestParam(required = true) String name,
+    public List<ExamDomain> query(@RequestParam(required = false) String name,
                                   @RequestParam(required = false) String examTypes,
                                   @RequestParam(required = false) Boolean enable,
                                   @RequestParam(required = false) String propertyKeys,
@@ -380,11 +380,15 @@ public class ExamController extends ControllerSupport {
             if (null != studentId) {
                 Subquery<ExamStudentEntity> subquery = query.subquery(ExamStudentEntity.class);
                 Root<ExamStudentEntity> subRoot = subquery.from(ExamStudentEntity.class);
-                subquery.select(subRoot.get("id"));
+                // subquery.select(subRoot.get("id"));
+                // Predicate p1 = cb.equal(subRoot.get("studentId"), studentId);
+                // Predicate p2 = cb.equal(subRoot.get("examId"), root.get("id"));
+                // subquery.where(cb.and(p1, p2));
+                // predicates.add(cb.exists(subquery));
+                subquery.distinct(true).select(subRoot.get("examId"));
                 Predicate p1 = cb.equal(subRoot.get("studentId"), studentId);
-                Predicate p2 = cb.equal(subRoot.get("examId"), root.get("id"));
-                subquery.where(cb.and(p1, p2));
-                predicates.add(cb.exists(subquery));
+                subquery.where(p1);
+                predicates.add(root.get("id").in(subquery));
             }
 
             return cb.and(predicates.toArray(new Predicate[predicates.size()]));