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 注释整个服务。
取决于:
- 调用
XService.doSomthing
的方法,注解是否为@Transactional
,结尾是否为RuntimeException
。
- 默认事务传播行为配置。
默认情况下,如果您从 控制器 调用 XService.doSomthing
,User 实例应更新为 u
是一个 附加实例 并且方法 不会抛出运行时异常。
查看 this post,我认为它可以向您解释有关 JPA 事务行为的有趣信息。
祝你好运。
我们使用的是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 注释整个服务。
取决于:
- 调用
XService.doSomthing
的方法,注解是否为@Transactional
,结尾是否为RuntimeException
。 - 默认事务传播行为配置。
默认情况下,如果您从 控制器 调用 XService.doSomthing
,User 实例应更新为 u
是一个 附加实例 并且方法 不会抛出运行时异常。
查看 this post,我认为它可以向您解释有关 JPA 事务行为的有趣信息。
祝你好运。