hibernate Spring 事务传播@Required

vq8itlhq  于 2022-11-14  发布在  Spring
关注(0)|答案(2)|浏览(148)
@GetMapping("trans")
    @Transactional()
    public String primaryTrans() {
        User u1 = new User(0,"test","test@email.com");
        us.save(u1);
        User u2 = new User(0,"test1","test1@email.com");
        us.save(u2);
        secondaryTrans();
        return "index";
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    private void secondaryTrans() {
        // TODO Auto-generated method stub
        User u2 = new User(0,"test2","test3@email.com".repeat(300));
        us.save(u2);
    }

在这里,我手动从辅助事务引发数据太长异常,但这会导致主事务也回滚。我们如何才能确保提交主事务而不考虑辅助事务

bqujaahr

bqujaahr1#

在本例中,由于第二个方法是从同一个类调用的,因此很可能不会创建第二个事务。Springs事务支持使用AOP代理创建事务。这些文件包含了关于为什么这不起作用的描述。

dfty9e19

dfty9e192#

最简单的方法是捕获从secondaryTrans()方法抛出的异常,因此只需将secondaryTrans() Package 到try-Catch块中:

try {
  secondaryTrans();
} catch (Exception e) {
  //...
}

相关问题