数据库数据类型empcode
定义为十进制。
此代码:
public KwlReturnObject getPayrollDataHrms(HashMap<String, Object> requestParams)
{
boolean success = false;
List lst = null;
KwlReturnObject result = null;
try {
ArrayList name = null;
String hql = "";
ArrayList value = null;
ArrayList orderby = null;
ArrayList ordertype = null;
String[] searchCol = null;
if ((requestParams.containsKey("primary"))
&& (((Boolean) requestParams.get("primary")).booleanValue())) {
hql = "from PayrollDataDisp where empcode=?";
String userid = requestParams.get("userid").toString();
System.out.println("userid:"+userid);
lst = HibernateUtil.executeQuery(this.hibernateTemplate, hql,
new Object[] { userid });
if(lst!=null){
result = new KwlReturnObject(success, "success", "", lst,
lst.size());
}
KwlReturnObject localKwlReturnObject1 = result;
return result;
}
success = true;
// return result;
} catch (Exception ex) {
success = false;
// return result;
} finally {
}
return result;
}
生成以下堆栈跟踪:
java.lang.ClassCastException: java.lang.String cannot be cast to java.math.BigDecimal
at org.hibernate.type.BigDecimalType.set(BigDecimalType.java:51)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:154)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:136)
at org.hibernate.param.PositionalParameterSpecification.bind(PositionalParameterSpecification.java:62)
at org.hibernate.loader.hql.QueryLoader.bindParameterValues(QueryLoader.java:514)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1589)
at org.hibernate.loader.Loader.doQuery(Loader.java:696)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
at org.hibernate.loader.Loader.doList(Loader.java:2228)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125)
at org.hibernate.loader.Loader.list(Loader.java:2120)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:361)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1148)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:921)
at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
at com.krawler.esp.hibernate.impl.HibernateUtil.executeQuery(HibernateUtil.java:421)
at com.krawler.spring.hrms.common.hrmsCommonDAOImpl.getPayrollDataHrms(hrmsCommonDAOImpl.java:1744)
at com.krawler.spring.hrms.common.hrmsCommonController.getPayrollData(hrmsCommonController.java:1686)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.krawler.common.wrapper.generalController.getData(generalController.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:471)
at org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:408)
at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at com.krawler.esp.handlers.sessionAdvisor.invoke(sessionAdvisor.java:45)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy7.handleRequest(Unknown Source)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
答案 0 :(得分:3)
在:
lst = HibernateUtil.executeQuery(this.hibernateTemplate, hql,
new Object[] { userid });
您正在传递userid
String
个实例。尝试将其转换为BigDecimal
:
lst = HibernateUtil.executeQuery(this.hibernateTemplate, hql,
new Object[] { new BigDecimal(userid) });
您需要从号码中删除所有逗号。
答案 1 :(得分:1)
您在这里userId
获得requestParams.get()
作为String
:
String userid = requestParams.get("userid").toString();
在executeQuery
预期的userId
属于BigDecimal
类型,因为它看起来是您实体中userId
的类型,是这里很奇怪,因为我认为BigDecimal
,id
或int
使用Integer
是id
更合适的类型
所以无论如何,避免此异常的解决方案是将userId
转换为BigDecimal
new BigDecimal(userId.replaceAll(",",""))
,您的代码应为:
lst = HibernateUtil.executeQuery(this.hibernateTemplate, hql,
new Object[] { new BigDecimal(userid.replaceAll(",","")) });
请注意.replaceAll(",","")
避免字符串格式例外的重要性,请查看 How can i parse a String to BigDecimal? 以获取更多信息。