如何在Spring Boot中使用EntityManager处理异常

时间:2019-02-28 00:45:17

标签: java spring spring-boot jpa exception

我有道层:

@Transactional
public class DatabaseCollectionDao implements IDatabaseCollectionDao {

    @PersistenceContext
    private EntityManager entityManager;

    @Override
    public void create(Collection collection) {
           entityManager.persist(collection);
    }
}

正常工作,但是:

  1. 当数据库不可用时,我会出现 SocketException
  2. 当数据库包含重复的键时,我会出现 SQLIntegrityConstraintViolationException

我正在尝试在创建方法中尝试/捕获

@Override
    public void create(Collection collection) {
           try{
               entityManager.persist(collection);
           } catch (SQLIntegrityConstraintViolationException e){
               //do smth
           }
    }

但是Intellij表示从不抛出
当我尝试尝试/捕获 Exception 时,我遇到了 UnexpectedRollbackException

如何使用JPA实体管理器处理异常?

更新:尝试删除@Transactional没有任何作用

P.S。可以肯定的是,我试图在更高的层次上尝试/捕捉它。我不知道我可以尝试解决什么。

1 个答案:

答案 0 :(得分:1)

create customException处理程序扩展ResponseEntityExceptionHandler。 @ExceptionHandler(ConstraintViolationException :: class)有趣的handleConstraintViolation(例如:ConstraintViolationException,请求:WebRequest):ResponseEntity {}您可以轻松将Kotlin片段转换为Java –