升级Hibernate5,捕捉异常遇到的坑!

Posted qq_41427281

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了升级Hibernate5,捕捉异常遇到的坑!相关的知识,希望对你有一定的参考价值。

1.升级版本

hibernate-core:4.3.9 升级为hibernate-core:5.5.4

2.遇到的问题

问题描述

升级后的主键冲突异常-ConstraintViolationException ,没有被捕捉到,因为hibernate5相较于之前的版本抛出的异常是其父类-PersistenceException(严格说是父类的父类的父类)。

ConstraintViolationException 的父类为JDBCException;

 JDBCException的父类为HibernateException;

HibernateException的父类为PersistenceException

详情

捕捉异常代码如下:

catch (ConstraintViolationException e) {
    if (tx != null) {
        tx.rollback();
    }
    throw new EntityExistException("已存在相同XXX信息,无法添加!", e);
}

升级hibernate5之前,捕捉的异常如图:

升级后,捕捉的异常如图:

 3.解决方法

判断是可以使用e.getCause()判断

方法一

catch (PersistenceException e) {
    if (tx != null) {
        tx.rollback();
    }
    if (e.getCause() instanceof ConstraintViolationException) {
        throw new EntityExistException("已存在相同XXX信息,无法添加!", e);
    } else {
        throw e;
    }
}

方法二

catch (PersistenceException e) {
    if (tx != null) {
        tx.rollback();
    }
    if (e.getCause().getCause().getMessage().contains("某某主键名")) {
        throw new EntityExistException("已存在相同的XXX,请联系XXX!", e);
    } else {
        throw e;
    }
} 

大家如果有更好的方法,欢迎在评论区赐教!!!

以上是关于升级Hibernate5,捕捉异常遇到的坑!的主要内容,如果未能解决你的问题,请参考以下文章

JavaCV升级1.5.6之后遇到h265/hevc编码的视频无法打开编解码器avcodec_open2() error -1:Could not open video codec异常解决办法(代码片

hibernate5新手跳过的坑

Redis遇到的坑

汇总开发过程中遇到的坑

重玩Mini2440遇到的坑

从 Hibernate3 升级到 Hibernate5 时出现错误