gpt4 book ai didi

spring - 我无法在@Transactional 注释的方法中捕获异常

转载 作者:行者123 更新时间:2023-12-04 11:58:08 24 4
gpt4 key购买 nike

我无法在带注释的方法中捕获异常 @Transactional .
如果 save,我想向创建的用户发送邮件操作成功。

当用户名已被使用时,PostgreSQL 抛出异常 PSQLException这是 SQLExcpetion 的扩展这是 Exception 的扩展.我抓不到 ExceptionPSQLException然后我试图 catch Throwable这是有效的,但不能解决我的问题并开始捕捉 Throwable是新问题的原因。

  • 当我得到 DataIntegrityViolationException(这是 Spring 的一个异常)时,我想传播它,因为我的 Controller 有处理程序,它返回为这个具体异常指定的语句和状态。当我捕获 Throwable 时,我必须始终抛出 RuntimeException。
  • 很奇怪的是emailSender.sendEmail()即使抛出了一些异常也会被调用。但如果 userRepository正在抛出异常,任何方法都不应被调用,异常应在 catch 中捕获语句然后事务应该回滚。我是否正确理解交易?

  • 我的服务的实现:
    @Transactional
    public UserEntity createUser(UserEntity user) {
    try {
    final UserEntity saved = userRepository.save(user);
    emailSender.sendEmail(saved);
    return saved;
    } catch (Throwable t) {
    throw new RuntimeException();
    }
    return null;
    }

    当我尝试使用 IDEA 调试此方法时,调试器不会输入 catch 语句,但我的处理程序注释了 @RestControllerAdvice正在捕获此异常。

    知道出了什么问题,或者你知道类似的问题吗?

    最佳答案

    遇到了同样的问题。使用 saveAndFlush 修复.
    这是有道理的,因为对于事务性,事务在执行函数后被提交(到数据库)。但与 saveAndFlush ,事实并非如此。

    关于spring - 我无法在@Transactional 注释的方法中捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47637248/

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