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");
    }
}

注意 u.merge() 在 setLastModified 之后没有被调用。此方法完成后,用户 table 的 lastModified 列中的值应该是多少。

谢谢!

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

另一方面,Roo 没有用 @Transactional 注释每个服务方法,它在生成的 ITD 注释整个服务。

取决于:

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

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

查看 this post,我认为它可以向您解释有关 JPA 事务行为的有趣信息。

祝你好运。