Java 不带实体合并调用的spring事务注释方法

Java 不带实体合并调用的spring事务注释方法,java,spring,spring-roo,transactional,Java,Spring,Spring Roo,Transactional,我们使用的是SpringRoo,代码库中有一些用@Transactional注释的方法 比如说, class XService { @Transactional public Response doSomething(String email) { User u = User.findByEmail(email); u.setLastModified(Calendar.getInstance()); return new Respo

我们使用的是SpringRoo,代码库中有一些用@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列中的值应该是多少

谢谢

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

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

取决于:

  • 调用
    XService.doSomthing
    的方法被注释为
    @Transactional
    或not,并以
    运行时异常
    或not结束
  • 默认事务传播行为配置
  • 默认情况下,如果从控制器调用
    XService.doSomthing
    ,则用户实例应更新为
    u
    附加实例,并且方法不会引发运行时异常

    看看我认为可以解释JPA交易行为的有趣信息

    祝你好运。

    u.merge()根本不被调用。是的,这不是roo生成的方法。请考虑把你的答案作为一个评论,因为它不试图回答这个问题。谢谢