Browse Source

修复多表查询级联查询慢问题

ting.yin 6 years ago
parent
commit
bba30baf99

+ 1 - 1
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamSubject.java

@@ -71,7 +71,7 @@ public class ExamSubject implements Serializable {
     @Column(name = "remark")
     @Column(name = "remark")
     private String remark;
     private String remark;
 
 
-    @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.EAGER)
+    @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY)
     @JoinTable(name="eb_exam_subject_marker",
     @JoinTable(name="eb_exam_subject_marker",
     		joinColumns={@JoinColumn(name="subject_code",referencedColumnName = "code"),@JoinColumn(name="exam_id",referencedColumnName = "exam_id")},
     		joinColumns={@JoinColumn(name="subject_code",referencedColumnName = "code"),@JoinColumn(name="exam_id",referencedColumnName = "exam_id")},
     		inverseJoinColumns={@JoinColumn(name="marker_id")})
     		inverseJoinColumns={@JoinColumn(name="marker_id")})

+ 5 - 4
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/MarkerServiceImpl.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.stmms.biz.exam.service.impl;
 package cn.com.qmth.stmms.biz.exam.service.impl;
 
 
 import java.sql.Date;
 import java.sql.Date;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.List;
 import java.util.Random;
 import java.util.Random;
@@ -149,6 +150,7 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
             int start = 1;
             int start = 1;
             int end = start + count - 1;
             int end = start + count - 1;
             String randomStr = getRandom();
             String randomStr = getRandom();
+            Set<Marker> markers = new HashSet<Marker>();
             for (; start <= end; start++) {
             for (; start <= end; start++) {
                 Marker marker = new Marker();
                 Marker marker = new Marker();
                 marker.setExamId(subject.getExamId());
                 marker.setExamId(subject.getExamId());
@@ -164,12 +166,11 @@ public class MarkerServiceImpl extends BaseQueryService<Marker> implements Marke
                 marker.setName(marker.getLoginName());
                 marker.setName(marker.getLoginName());
                 if (save(marker) != null) {
                 if (save(marker) != null) {
                 	result++;
                 	result++;
+                	markers.add(marker);
                 }
                 }
-                Set<Marker> markers = subject.getMarkers();
-                markers.add(marker);
-                subject.setMarkers(markers);
-                subjectService.save(subject);
             }
             }
+            subject.setMarkers(markers);
+            subjectService.save(subject);
         }
         }
         return result;
         return result;
     }
     }

+ 8 - 2
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/parameter/ExamMarkerController.java

@@ -122,12 +122,18 @@ public class ExamMarkerController extends BaseParameterController {
             } else if (subjectList.size() > 0) {
             } else if (subjectList.size() > 0) {
                 subject = subjectList.get(0);
                 subject = subjectList.get(0);
             }
             }
+            query.setPageNumber(1);
+            query.setPageSize(Integer.MAX_VALUE);
+            query.setExamId(examId);
+            query.orderById();
+            query.setSubjectCode(subject.getCode());
+            query = markerService.findByQuery(query);
             Set<MarkerVO> markerVOs = new HashSet<MarkerVO>();
             Set<MarkerVO> markerVOs = new HashSet<MarkerVO>();
             MarkLibrarySearchQuery query2 = new MarkLibrarySearchQuery();
             MarkLibrarySearchQuery query2 = new MarkLibrarySearchQuery();
             query2.setExamId(examId);
             query2.setExamId(examId);
             query2.setSubjectCode(subject.getCode());
             query2.setSubjectCode(subject.getCode());
             query2.setStatus(LibraryStatus.MARKED);
             query2.setStatus(LibraryStatus.MARKED);
-            for (Marker marker : subject.getMarkers()) {
+            for (Marker marker : query.getResult()) {
             	marker.setSubject(subject);
             	marker.setSubject(subject);
         		query2.setMarkerId(marker.getId());
         		query2.setMarkerId(marker.getId());
         		marker.setMarkedCount(libraryService.countByQuery(query2));
         		marker.setMarkedCount(libraryService.countByQuery(query2));
@@ -267,7 +273,7 @@ public class ExamMarkerController extends BaseParameterController {
             		marker.setSubjectCode("-");
             		marker.setSubjectCode("-");
         			marker.setSubjectName("-");
         			marker.setSubjectName("-");
             		list.add(marker);
             		list.add(marker);
-            	}else if(StringUtils.isNotBlank(query.getSubjectCode())){
+            	}else if(query.getSubjectCode()!=null){
             		ExamSubject subject = subjectService.find(examId, query.getSubjectCode());
             		ExamSubject subject = subjectService.find(examId, query.getSubjectCode());
             		marker.setSubjectCode(subject.getCode());
             		marker.setSubjectCode(subject.getCode());
             		marker.setSubjectName(subject.getCode() + "-" + subject.getName());
             		marker.setSubjectName(subject.getCode() + "-" + subject.getName());

+ 8 - 1
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/parameter/ExamMarkerInfoController.java

@@ -94,7 +94,14 @@ public class ExamMarkerInfoController extends BaseParameterController {
                 // query = markLibraryService.findGroupByQuery(query);
                 // query = markLibraryService.findGroupByQuery(query);
                // query = markLibraryService.getByCondition(query);
                // query = markLibraryService.getByCondition(query);
             	if(subjectCode!=null){
             	if(subjectCode!=null){
-            		for (Marker marker: examSubjects.get(0).getMarkers()) {
+            		MarkerSearchQuery query2 = new MarkerSearchQuery();
+            		query2.setPageNumber(1);
+            		query2.setPageSize(Integer.MAX_VALUE);
+            		query2.setExamId(examId);
+            		query2.orderById();
+            		query2.setSubjectCode(subjectCode);
+                    query2 = markerService.findByQuery(query2);
+            		for (Marker marker: query2.getResult()) {
             			if(markerId.equals(marker.getId())){
             			if(markerId.equals(marker.getId())){
             				MarkerDTO markerDTO = getDTO(markerId, examSubjects.get(0));
             				MarkerDTO markerDTO = getDTO(markerId, examSubjects.get(0));
             				MarkerDTOs.add(markerDTO);
             				MarkerDTOs.add(markerDTO);