Zakariyya / blog

https://zakariyya.github.io/blog/
6 stars 1 forks source link

唯一索引异常捕获 #62

Open Zakariyya opened 4 years ago

Zakariyya commented 4 years ago

date: 2019-01-24 16:04:23 今天碰到个问题

前提场景

先解决问题

经过不断 ctrl + 鼠标左键 ,找到

java.lang.Exception
|-- java.sql.SQLException
    |-- SQLNonTransientException
        |-- SQLIntegrityConstraintViolationException

SQLIntegrityConstraintViolationExceptionSQLException 都没法被 try catch该贴指出用 DataIntegrityViolationExceptionException 来捕获。

该贴指出用:捕捉到这个异常后要调用 .getCause() 方法才能获取真实的异常信息。

于是


    try {
      userRepository.save(data);
    } catch (DataIntegrityViolationException e) { // 存在相同的唯一索引数据
      log.info("e.getCause().getCause().getMessage() ==> "+e.getCause().getCause().getMessage());
    }

    打印: e.getCause().getCause().getMessage() ==> Duplicate entry 'anan1529' for key 'account'

正是我需要的内容,对信息处理下后即可作为错误信息返回出去,将该思路抽取到 CoreService 中所有代码服用,每次新增 唯一索引 的需求,,只需要在数据库字段添加唯一标识,而不需要修改代码。

底下补充内容

Exception

  • 检查性异常 : 指在编译时即可查出的异常,会在编译时抛出,常见异常如下
    • 非检查性异常 : 通常时由于业务,流程导致不可预测的异常,比方说 空指针异常,IO流异常等,通常为 RuntimeException

eg


参考:

好久没有写跟java相关的笔记了,啧啧啧