在使用SSH(Strut2+Spring4+Hibernate4)时,用set方法向数据库写入数据时service实现层报错,希望大大佬们帮忙看看,谢谢!
action类:
@RequestMapping(value = "/modifyTouristNickNameByTouristId.do")
public void modifyTouristNickNameByTouristId(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setCharacterEncoding("utf-8");
response.setHeader("Access-Control-Allow-Origin", "*");
int touristId = Integer.parseInt(request.getParameter("touristId"));
String touristNickName = request.getParameter("touristNickName");
boolean b1 = false;
boolean b2 = false;
TouristInfo touristInfo = iTouristDetailInfoService.getTouristInfoByTouristNickName(touristNickName);
if (touristInfo == null){
b1 = iTouristDetailInfoService.modifyTouristNickNameByTouristId(touristId,touristNickName);
b2 = true;
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("modifyStatus",b1);
jsonObject.put("QueryStatus",b2);
Object o = JSONObject.toJSON(jsonObject);
response.getWriter().write(o.toString());
response.getWriter().flush();
response.getWriter().close();
}
service实现类:
@Override
public boolean modifyTouristNickNameByTouristId(int touristId, String touristNickName) {
Boolean b = false;
b = iTouristDetailInfoDao.modifyTouristNickNameByTouristId(touristId,touristNickName);
return b;
}
dao实现类:
@Override
public boolean modifyTouristNickNameByTouristId(int touristId, String touristNickName) {
/**
* set方法出现bug,service层无法返回参数,报错AopUtils.java
* @author JSC
* @time 2017-12-05
*/方法一
/*TouristInfo touristInfo = findTouristInfoByTouristId(touristId);
touristInfo.setTouristNickName(touristNickName);
Boolean b = false;
b = this.saveOrUpdate(touristInfo);
if(b){
return true;
}else{
return false;
}*/
/*方法二:*/
Session session = this.getSession();
String sql = "UPDATE `游客信息` SET `用户名` = ? WHERE `用户ID` = ? AND `是否启用` = '1' AND `游客状态` = '1'";
int i = session.createSQLQuery(sql)
.setParameter(0,touristNickName)
.setParameter(1,touristId)
.executeUpdate();
if(i == 1){
return true;
}else{
return false;
}
}
basedao实现类:
public <T> boolean saveOrUpdate(T t) {
boolean flag = false;
this.hibernateTemplate.saveOrUpdate(t);
flag = true;
return flag;
}
报错信息:tomcat Server并未报错,tomcat localhost log报错,信息如下:
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:361)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1080)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:75)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:757)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2287)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
总结问题描述:
在dao实现类中,方法一在dao层不会出错,但是在把参数返回到service实现层的时候就会出错,单步调试会跳转到AopUtils.java中,然后出想上述错误信息;
方法二用sql方式就不会报错,目前用此方法暂时解决;
希望大大佬们帮忙看看,小弟将不胜感激。