ssm框架中,如何抛出sql语句检查约束异常?

在做透支转账时,前台报500,提示:违反检查约束条件;
不知在哪里抛出或者声明异常,请大神指点
前台报错500,内容如下:
exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException:

Error updating database. Cause: java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

The error may involve com.zrgk.ssm.dao.EmpDao.updateSal-Inline

The error occurred while setting parameters

SQL: update emp set salary=salary+? where empid=?

Cause: java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

; SQL []; ORA-02290: 违反检查约束条件 (PEPE.SALARY)
; nested exception is java.sql.SQLException: ORA-02290: 违反检查约束条件 (PEPE.SALARY)

service实现类代码如下:
(已做转账的声明式事务)

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpDao ed;

    @Override
    @Transactional(readOnly=false,propagation=Propagation.REQUIRED)
    public void zhuan(Integer ruid, Integer chuid, Double money) {
        // TODO Auto-generated method stub

        //先转入
        ed.updateSal(new Emp(ruid,null, money));
        //再转出
        ed.updateSal(new Emp(chuid, null, -money));

    }
}

在dao层抛出,EmpDao

1.违反约束条件是你程序的验证没做好把,约束做好了怎么会报约束错误。
2.做全局异常处理器统一处理异常,抛就抛自己自定义的异常。

做全局异常处理器统一处理异常,抛就抛自己自定义的异常

最好是做一个异常处理类,统一处理异常,然后又异常的地方throw即可

这个你仔细看一下的你写的sql语句,多了分号什么的 你检查一次sql

估计是sql语句写的有问题,你可以试试一个简单的查询看看。

最好看下数据库的表创建语句,看下SALARY字段设置了什么约束规则或者索引,应该是更新后的数据跟字段上设置的约束规则冲突了

原来是在conroller中把对应方法try catch,然后return到提示错误页面,代码如下:

@RequestMapping("zhuan.do")
    public String zhuan(Integer ruid,Integer chuid,Double money){
        try {
            es.zhuan(ruid, chuid, money);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            return "error.jsp";
            //e.printStackTrace();
        }
        return "redirect:zhuan.jsp";
    }

dao层处理早了

写一个全局的处理异常方法,所有异常都会被拦截

用 for each 来包住异常

使用spring AOP编程了 对异常 日志同意管理