Получение ошибки 'java.lang.ClassCastException: java.util.Date не может быть приведен к java.lang.String'

0

У меня ниже метод обновления столбцов в 3 таблицах. Записи обновляются в первой таблице (Ref: query2) успешно, но она дает ошибку при обновлении столбца "modifiedDate" в таблице 2 и таблице 3. Тот же столбец успешно обновлен в таблице 1.

@Override
    public void updateResult(int candidateID, String newResult, int totalScore, Date today, String newUploadState) {

        System.out.println("Updating the result to DB");

        Session currentSession = sessionFactory.getCurrentSession();

        String query1 = "SELECT p.ro  FROM PersonalInfo p WHERE p.candidateID =:id";

        String ro = currentSession.createQuery(query1).setParameter("id", candidateID).list().get(0).toString();

        String query2 = "UPDATE PersonalInfo as p set " +
                        "p.score = :score," +
                        "p.result = :result, " +
                        "p.modifiedDate = :modifiedDate, " +
                        "p.modifiedBy = :modifiedBy, " +
                        "p.uploadState = :uploadState " +  
                        "where p.candidateID = :id";

        Query thequery2 = currentSession.createQuery(query2);
        thequery2.setParameter("id", candidateID);
        thequery2.setParameter("score", totalScore);
        thequery2.setParameter("result", newResult);
        thequery2.setParameter("modifiedDate", today);
        thequery2.setParameter("modifiedBy", ro);
        thequery2.setParameter("uploadState", newUploadState);
        thequery2.executeUpdate();

        String query3 = "UPDATE Address as a set " +
                "a.modifiedDate = :modifiedDate, " +
                "a.modifiedBy = :modifiedBy, " +
                "a.uploadState = :uploadState " +  
                "where a.candidateID_FK = :id";

        Query thequery3 = currentSession.createQuery(query3);
        thequery3.setParameter("id", candidateID);
        thequery3.setParameter("modifiedDate", today);
        thequery3.setParameter("modifiedBy", ro);
        thequery3.setParameter("uploadState", newUploadState);
        thequery3.executeUpdate();

        String query4 = "UPDATE Fitness as f set " +
                "f.modifiedDate = :modifiedDate, " +
                "f.modifiedBy = :modifiedBy, " +
                "f.uploadState = :uploadState " +  
                "where f.candidateID_FK1 = :id";

        Query thequery4 = currentSession.createQuery(query4);
        thequery4.setParameter("id", candidateID);
        thequery4.setParameter("modifiedDate", today);
        thequery4.setParameter("modifiedBy", ro);
        thequery4.setParameter("uploadState", newUploadState);
        thequery4.executeUpdate();
    }

Ниже показана трассировка стека с консоли, которая показывает ошибку, связанную с литой даты в String. Тип данных для столбца ModifiedDate во всех трех таблицах - "datetime".

Hibernate: update personal_info set Score=?, Result=?, ModifiedDate=?, ModifiedBy=?, UploadState=? where CandidateID=?
Hibernate: update address_details set ModifiedDate=?, ModifiedBy=?, UploadState=? where candidateID_FK=?
Apr 19, 2018 9:34:45 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SoldierRecruitmentSystem] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String] with root cause
java.lang.ClassCastException: java.util.Date cannot be cast to java.lang.String
    at org.hibernate.type.descriptor.java.StringTypeDescriptor.unwrap(StringTypeDescriptor.java:22)
    at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor$1.doBind(VarcharTypeDescriptor.java:46)
    at org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:74)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:280)
    at org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:275)
    at org.hibernate.param.NamedParameterSpecification.bind(NamedParameterSpecification.java:53)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.doExecute(BasicExecutor.java:92)
    at org.hibernate.hql.internal.ast.exec.BasicExecutor.execute(BasicExecutor.java:59)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:450)
    at org.hibernate.engine.query.spi.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:374)
    at org.hibernate.internal.SessionImpl.executeUpdate(SessionImpl.java:1511)
    at org.hibernate.query.internal.AbstractProducedQuery.doExecuteUpdate(AbstractProducedQuery.java:1526)
    at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1504)
    at com.company.dao.BRODAOImpl.updateResult(BRODAOImpl.java:431)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:338)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:206)
    at com.sun.proxy.$Proxy34.updateResult(Unknown Source)
    at com.company.service.BROServiceImpl.computeResult(BROServiceImpl.java:196)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:338)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.transaction.interceptor.TransactionInterceptor$$Lambda$82/1563801204.proceedWithInvocation(Unknown Source)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy35.computeResult(Unknown Source)
    at com.company.controller.BROController.computeResult(BROController.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:870)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:870)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:407)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
  • 0
    Можете ли вы проверить тип данных столбца в обеих таблицах вашей базы данных. Я думаю, это будет VARCHAR в одной таблице
  • 0
    Я проверил, это дата и время в обеих таблицах.
Показать ещё 2 комментария
Теги:
model-view-controller
spring
hibernate

1 ответ

0

используйте одно из следующих значений в соответствии с типом столбца

thequery3.setParameter("modifiedDate", today, TemporalType.TIMESTAMP);

Или же

thequery3.setParameter("modifiedDate", today, TemporalType.DATE);

используйте то же самое для всех queries- thequery1, thequery2, thequery3, thequery4

Ещё вопросы

Сообщество Overcoder
Наверх
Меню