我们正在使用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列中的值应该是什么。
谢谢!
答案 0 :(得分:1)
取决于:
XService.doSomthing
的方法是否使用@Transactional
进行注释,并以RuntimeException
结尾。默认情况下,如果您从控制器呼叫XService.doSomthing
,则应更新用户实例,因为u
是附加实例和方法不会引发运行时异常。
看看this post我认为可以解释有关JPA交易行为的有趣信息。
祝你好运。答案 1 :(得分:-1)
“ u.merge()”在哪里??
另一方面,Roo没有使用 @Transactional 注释每个Service方法,它在生成的ITD上注释整个服务。