【问题标题】:How to handle exceptions using EntityManager in Spring Boot如何在 Spring Boot 中使用 EntityManager 处理异常
【发布时间】:2019-07-21 20:06:38
【问题描述】:

我有道层:

@Transactional
public class DatabaseCollectionDao implements IDatabaseCollectionDao {

    @PersistenceContext
    private EntityManager entityManager;

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

工作正常但是:

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

我正在尝试在 create 方法中try/catch

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

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

如何使用 JPA entityManager 处理异常?

更新:尝试删除 @Transactional 没有得到任何结果

附:可以肯定的是,我尝试在更高层尝试/捕捉它。我不知道我可以尝试更多来解决它。

【问题讨论】:

  • entity.persist(entity); - 这段代码正确吗?
  • 是的,它工作正常。但是当我停止 db 并尝试发送请求或再坚持一次时,这个实体(具有相同的 id)我遇到了这样的问题
  • 也许你在想Entitymanager::persistdocs.oracle.com/javaee/7/api/javax/persistence/…
  • 哦,对不起,当然。 entityManager.persist(entity);
  • 请显示您的statcktrace的相关部分

标签: java spring spring-boot jpa exception


【解决方案1】:

创建 customException 处理程序扩展 ResponseEntityExceptionHandler 。 @ExceptionHandler(ConstraintViolationException::class) fun handleConstraintViolation(ex: ConstraintViolationException, request: WebRequest): ResponseEntity {} 这个 kotlin sn-p 你可以轻松转换成 java –

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    相关资源
    最近更新 更多