gpt4 book ai didi

java - Spring 数据异常处理

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:00 25 4
gpt4 key购买 nike

我正在使用 Spring Data-JPA 开发一个项目。我需要处理 JpaRepository 方法调用中的一些异常。

在下面的代码中,我需要拦截违反主键的错误,但我无法直接捕获异常。在我的例子中,当发生这种异常时,存储库层 (JpaRepository) 会抛出 UnexpectedRollbackException 异常。我需要在这个异常对象中搜索以确定问题的原因。

我想知道是否有更“优雅”的方式来实现这一目标。

public Phone insert(Phone phone) throws BusinessException {
Phone result = null;
try{
result = phoneRepository.save(phone);
}
catch(UnexpectedRollbackException ex){
if((ex.getCause() != null && ex.getCause() instanceof RollbackException) &&
(ex.getCause().getCause() != null && ex.getCause().getCause() instanceof PersistenceException) &&
(ex.getCause().getCause().getCause() != null && ex.getCause().getCause().getCause() instanceof ConstraintViolationException)){
throw new BusinessException("constraint violation", ex);
}
}
catch(Exception ex){
throw new OuvidorNegocioException("unknown error", ex);
}
return result;
}

谢谢!

更新:

下面的代码似乎要好得多。

public Phone insert(Phone phone) throws BusinessException {
Phone result = null;
try{
result = phoneRepository.save(phone);
}
catch(UnexpectedRollbackException ex){
if(ex.getMostSpecificCause() instanceof SQLIntegrityConstraintViolationException){
throw new BusinessException("constraint violation", ex);
}
}
catch(Exception ex){
throw new OuvidorNegocioException("unknown error", ex);
}
return result;
}

最佳答案

无论在何处处理异常,您都可以选择查看 UnexpectedRollbackExceptiongetMostSpecificCause()getRootCause() 方法。 Here is information关于这些方法。

关于java - Spring 数据异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21000110/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com