【问题标题】:spring transactional annotated method without merge call on entities没有对实体进行合并调用的spring事务注释方法
【发布时间】:2015-01-21 00:14:15
【问题描述】:

我们使用的是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()。这个方法完成后user表的lastModified列的值应该是多少。

谢谢!

【问题讨论】:

    标签: java spring spring-roo transactional


    【解决方案1】:

    取决于:

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

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

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

    祝你好运。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • u.merge() 根本没有被调用。是的,这不是 roo 生成的方法。请考虑将您的答案添加为评论,因为它不会尝试回答问题。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 2017-02-05
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多