这里有Grails newb.我正在使用GGTS为一个简单的User模型生成一个控制器(字符串用户,传递的字符串)
在查看GGTS生成的代码时,我注意到在某些操作上有@Transactional注释,如delete(),save()和update().
我的问题是,为什么@Transactional在控制器中使用,为什么@Transactional没有在服务中使用?
Newb in grails
在grails中,执行所有与DB相关的工作和数据库事务的正确方法是在服务类而不是控制器中执行.因此,默认情况下,控制器没有执行事务的权限,因此我们使用@Transactional注释.虽然在服务中默认允许事务处理.
如果使用执行某些数据库事务的服务方法,则需要通过@Transactional注释使控制器操作成为事务性事务.虽然无需在服务方法中提及它.
换句话说,如果你不让控制器进行事务处理,那么你需要在服务类中提及它.
最佳做法是不使用自动生成的代码,因为它对初学者来说难以维护.官方文档将是您最好的帮助,当您创建控制器时,您将无法找到任何事务注释,而当您创建服务类时,您将在类级别看到事务注释.
PS - '创建'类不等于'生成'.