java.lang.ClassCastException: [Ljava.lang.Object; 无法转换为 com.sakhnin.classes.MonthlySummary

4
我正在尝试打印这份月度报告中的所有日期,但出现了以下异常。
SEVERE: Servlet.service() for servlet showMettingReports threw exception:java.lang.ClassCastException:[Ljava.lang.Object;无法转换为com.sakhnin.classes.MonthlySummary。位于org.apache.jsp.jspFiles.showMettingReports_jsp._jspService(showMettingReports_jsp.java:150)。在此之前,通过javax.servlet.http.HttpServlet.service(HttpServlet.java:725)完成了请求处理。发生异常时,已经执行了以下操作:org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432),org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396),org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340),org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291),org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52),org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206),org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721),org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466),org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391),org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318),com.sakhnin.implementations.Controller.doGet(Controller.java:140),javax.servlet.http.HttpServlet.service(HttpServlet.java:618)和javax.servlet.http.HttpServlet.service(HttpServlet.java:725)。此外,还执行了许多其他操作,包括org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219),org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106),org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506),org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142),org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79),org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610),org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88),org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537),org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081),org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658),org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222),org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566),org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523),java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source),java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source),org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)和java.lang.Thread.run(Unknown Source)。

MonthlySummary.java

public class MonthlySummary {
    @Id
    private String Date;
    private int Cost;
    private String Place;
    private String Start;
    private String End;
    private String Description;
    private int MentorID;

    public MonthlySummary() {
    // TODO Auto-generated constructor stub
    }


    public MonthlySummary(String place, String date, String start, String end,
        String description, int cost, int mentorID) {
    super();
    Place = place;
    Date = date;
    Start = start;
    End = end;
    Description = description;
    Cost = cost;
    MentorID = mentorID;
}

MonthlySummaryIMP.java

 public List<MonthlySummary> getMentorReportsById(int id) {
    List<MonthlySummary> reports=null;
    try{
    session = factory.openSession();
    session.beginTransaction();
    // Fetch all active coupons whose businesses' parent's category is as got in the argument
    SQLQuery query =  session.createSQLQuery("SELECT * FROM MonthlySummary WHERE MentorID="+id );
    reports = query.list();
    closeSession();
    }
    catch(HibernateException e){
        System.err.println(e.getMessage());
    }
    catch(Exception e){
        System.err.println(e.getMessage());
    }
    return reports;

}

JSP 文件

<tbody>
  <%
    List<MonthlySummary> m = (List<MonthlySummary>)request.getSession().getAttribute("meetingsReports");

    for(MonthlySummary report : m) {
  %>

  <td>Date<%=report.getDate() %></td>
  <td>Date<%=report.getPlace()%></td>
  <td>Date<%=report.getStart()%></td>
  <td>Date<%=report.getEnd()%></td>
  <td>Date<%=report.getDescription() %></td>
  <td>Date<%=report.getCost()%></td>

  <%
    }
  %>
</tbody>

你把 meetingsReports 添加在哪里了? - Shahzeb
2个回答

1
为避免出现 ClassCastException,您需要将 Entity 添加到查询对象中。请尝试以下操作--
SQLQuery query =  session.createSQLQuery("SELECT * FROM MonthlySummary WHERE MentorID="+id );

query.addEntity(MonthlySummary.class);

reports = query.list();
--rest of code

对我有用!谢谢 :) - odi assle

0

根据您的堆栈跟踪,它试图转换MonthlySummary列表,但实际上它无法理解左侧对象以完成此过程。

这种情况很奇怪,因为如果您没有在第一次设置HTTPSession属性,它应该会给您一个空指针异常。

您确定没有使用该键设置任何属性,我的假设是您正在该键中设置其他对象。

请使用Sighr提到的技巧,那应该对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接