繁体   English   中英

在实体上没有合并调用的Spring事务注释方法

[英]spring transactional annotated method without merge call on entities

我们正在使用spring roo,并且代码库中有一些用@Transactional注释的方法。

例如,

class XService {
    @Transactional
    public Response doSomething(String email) {
        User u = User.findByEmail(email);
        u.setLastModified(Calendar.getInstance());
        return new Response("OK");
    }
}

请注意,在setLastModified之后不会调用u.merge()。 此方法完成后,用户表的lastModified列中的值应该是什么。

谢谢!

取决于:

  1. 调用XService.doSomthing方法是否使用@Transactional注释,并且是否以RuntimeException结尾。
  2. 默认事务传播行为配置。

默认情况下,如果您从控制器调用XService.doSomthing ,则应该更新User实例,因为u是一个附加实例,并且方法不会引发运行时异常

看一下这篇文章 ,我认为它可以为您解释有关JPA上交易行为的有趣信息。

祝好运。

在哪里调用“ u.merge() ”?

另一方面,Roo不会使用@Transactional注释每个Service方法,而是使用生成的ITD注释整个Service。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM