获取在Spring Java中抛出DataIntegrityViolationException的列/属性名称

时间:2017-12-06 11:54:09

标签: java mysql spring hibernate

我正在使用Java 7,Spring 4和Hibernate 4.我正在处理每个层中的异常,以便用户输入。

从DB附近开始,我想知道是否有办法获取列名(除了从MySQL异常中拆分String消息)或org.springframework.dao.DataIntegrityViolationException中的属性名。为了确切地知道哪个属性/列是错误的(因为我对不同的属性/列有相同的约束)。

try {
     fooRepository.save(foo)
} catch(DataIntegrityViolationException e) {
    if(e.getRootCause() instanceof MySQLIntegrityConstraintViolationException) {
        LOGGER.error(e.getRootCause().getMessage());
    }

    if(e.getRootCause() instanceof MysqlDataTruncation) {
        LOGGER.error(e.getRootCause().getMessage());
    }
}

现在,我只能收到String消息,例如“列'FOO_BAR'的数据太长了”,是的,我可以得到列名,但我认为它可能存在一个干净的方法来做到这一点!

rootMsg.substring(rootMsg.indexOf("\'") + 1, rootMsg.lastIndexOf("\'"));

如果您需要更多解释并感谢您的帮助,请与我们联系!

0 个答案:

没有答案