执行时,异常如下
org.springframework.jdbc.BadSqlGrammarException: Bad SQL grammar [Insert into User (FirstName1,LastName) values('333','444')] in task 'executing StatementCallback'; nested exception is java.sql.SQLException: Unknown column 'FirstName1' in 'field list'
org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:198)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:262)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:283)
com.ce.spring.UserDAO$1.doInTransaction(UserDAO.java:86)
org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:114)
com.ce.spring.UserDAO.insertUser(UserDAO.java:81)
org.apache.jsp.index_jsp._jspService(index_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

解决方案 »

  1.   

    在doInTransaction方法中,使用
    try
    {
       // your operations
    }
    catch(DataAccessException e)
    {
        ts.setRollbackOnly();
        // ts = TransactionStatus
        ...other operations
    }如果采用programming的方式控制事务,需要手动设置rollback;
    但是,如果采用declaring方式,则可以直接在transactionAttributes中指定-DataAccessException就可以自动回滚了。
      

  2.   

    DarrenWang(达伦),按照你的方法试了一下,但还是不行呀,是不是什么地方漏了什么东西
      

  3.   

    miaoliujun(傲龙) ,事务放到SERVICE 那一层去是怎样做,请明示,谢谢
      

  4.   

    放到SERVICE 那一层:dao动作开始前打开事务,动作完成后关闭事务,异常时回滚只是不清楚spring的jdbcTemplate是否已经包含事务,需要看看代码