thodInvoker.java:176) 在 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:427) 在 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:788) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:646) http.HttpServlet.service(HttpServlet.java:727)位于 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119) 在 com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 位于java.lang.Thread.run(未知源)
现在,我不确定它为什么要首先查找QualificationId列,即使是这样,为什么找不到它?我猜别名会造成严重破坏 不确定2个GROUP BY是否有效,但以下内容似乎是可行的,甚至可能是一个thodInvoker.java:176) 在 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:427) 在 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:415) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:788) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 位于javax.servlet.http.HttpServlet.service(HttpServlet.java:646) http.HttpServlet.service(HttpServlet.java:727)位于 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119) 在 com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 位于java.lang.Thread.run(未知源),java,mysql,sql,hibernate,Java,Mysql,Sql,Hibernate,现在,我不确定它为什么要首先查找QualificationId列,即使是这样,为什么找不到它?我猜别名会造成严重破坏 不确定2个GROUP BY是否有效,但以下内容似乎是可行的,甚至可能是一个,并且存在(..s.studentRegNo=studentRegNo) 这是因为您的实体StudentEduPojo已将主键(@Id)定义为QualificationId。所以它在搜索结果中搜索它,但没有找到它 最好将studentrengo设置为实体中的Id,或者将查询更改为返回Qualificatio
,并且存在(..s.studentRegNo=studentRegNo)
这是因为您的实体
StudentEduPojo
已将主键(@Id)定义为QualificationId
。所以它在搜索结果中搜索它,但没有找到它
最好将studentrengo
设置为实体中的Id,或者将查询更改为返回QualificationId
注意:您还必须执行@Joop Eggen(字段名的别名问题)在另一个答案中所说的更改。仍然得到相同的异常,'java.sql.SQLException:Column'QualificationId'notfound.'Removing.addEntity(StudentEduPojo.class);解决了这个问题。我不知道为什么,但我猜测,为了返回StudentEduPojo的对象,它将查找QualificationId。是吗?是的,你是对的。如果您已附加实体,我的解决方案将修复此问题。如果没有,则不需要此解决方案。
QualificationId studentRegNo CourseName Percentage
1 1 A 91
2 1 B 81
3 1 C 71
4 1 D 61
5 2 A 91
6 2 B 81
7 2 C 71
8 2 D 50
TestId studentRegNo testLevel percentage
1 1 1 91
2 1 2 81
3 1 3 71
4 2 1 80
5 2 2 99
6 2 3 87
package com.ms.avalon.master.dao.rdbms;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.SQLQuery;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import com.ms.avalon.master.beans.PlacementCaseBean;
import com.ms.avalon.master.dao.PlacementDao;
import com.ms.avalon.master.formbeans.PlacementFormBean;
import com.ms.avalon.master.pojos.studentpojos.StudentEduPojo;
import com.ms.avalon.master.pojos.studentpojos.StudentTestPojo;
public class PlacementDaoRdbms extends DBConnectionDao implements PlacementDao {
@Override
public List<StudentEduPojo> searchWithCases(PlacementCaseBean caseBean, PlacementFormBean placementBean) {
System.out.println(session);
System.out.println(hibernateTemplate);
DetachedCriteria criteriaE = DetachedCriteria.forClass(StudentEduPojo.class, "qualTable");
DetachedCriteria criteriaT = DetachedCriteria.forClass(StudentTestPojo.class, "testTable");
String query =
"SELECT stdqualificationmaster.studentRegNo "
+ "FROM "
+ "(SELECT studentRegNo FROM stdqualificationmaster "
+ "WHERE (CourseName = 'High School' AND Percentage >= 90) "
+ "OR (CourseName = 'Intermediate' AND Percentage >= 80) "
+ "OR (CourseName = 'BCA' AND Percentage >= 70) "
+ "OR (CourseName = 'MCA' AND Percentage >= 60) "
+ "GROUP BY studentRegNo "
+ "HAVING COUNT(1) = 4 "
+ ") stdqualificationmaster JOIN "
+ "(SELECT studentRegNo FROM testmaster "
+ "WHERE (testLevel = '1' AND percentage >= 90) "
+ "OR (testLevel = '2' AND percentage >= 80) "
+ "OR (testLevel = '3' AND percentage >= 70) "
+ "GROUP BY studentRegNo "
+ "HAVING COUNT(1) = 3 "
+ ") testmaster ON stdqualificationmaster.studentRegNo = testmaster.studentRegNo;";
Transaction tx = session.beginTransaction();
SQLQuery q = session.createSQLQuery(query)
.addEntity(StudentEduPojo.class);
List<StudentEduPojo> list = q.list();
System.out.println(list.size());
return null;
}
}
String query =
"SELECT studentRegNo FROM stdqualificationmaster s "
+ "WHERE (CourseName = 'High School' AND Percentage >= 90) "
+ "OR (CourseName = 'Intermediate' AND Percentage >= 80) "
+ "OR (CourseName = 'BCA' AND Percentage >= 70) "
+ "OR (CourseName = 'MCA' AND Percentage >= 60) "
+ "GROUP BY studentRegNo "
+ "HAVING COUNT(1) = 4 "
+ "AND "
+ "studentRegNo IN (SELECT studentRegNo FROM testmaster "
+ "WHERE (testLevel = '1' AND percentage >= 90) "
+ "OR (testLevel = '2' AND percentage >= 80) "
+ "OR (testLevel = '3' AND percentage >= 70) "
+ "GROUP BY studentRegNo "
+ "HAVING COUNT(1) = 3 "
+ ")";