我有以下方法来更新3个表中的列。记录在第一个表(Ref:query2)中成功更新,但在更新表2和表3中的“modifiedDate”列时出错。同一列在表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相关的错误。所有3个表中“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 :(得分:0)
根据列类型
使用以下其中一项thequery3.setParameter("modifiedDate", today, TemporalType.TIMESTAMP);
或者
thequery3.setParameter("modifiedDate", today, TemporalType.DATE);
对所有查询使用相同的内容 - thequery1, thequery2, thequery3, thequery4