Grails - 生成简单Controller的@Transactional注释

ext*_*620 1 grails

这里有Grails newb.我正在使用GGTS为一个简单的User模型生成一个控制器(字符串用户,传递的字符串)

在查看GGTS生成的代码时,我注意到在某些操作上有@Transactional注释,如delete(),save()和update().

我的问题是,为什么@Transactional在控制器中使用,为什么@Transactional没有在服务中使用?

Newb in grails

Che*_*tan 5

在grails中,执行所有与DB相关的工作和数据库事务的正确方法是在服务类而不是控制器中执行.因此,默认情况下,控制器没有执行事务的权限,因此我们使用@Transactional注释.虽然在服务中默认允许事务处理.

如果使用执行某些数据库事务的服务方法,则需要通过@Transactional注释使控制器操作成为事务性事务.虽然无需在服务方法中提及它.

换句话说,如果你不让控制器进行事务处理,那么你需要在服务类中提及它.

最佳做法是不使用自动生成的代码,因为它对初学者来说难以维护.官方文档将是您最好的帮助,当您创建控制器时,您将无法找到任何事务注释,而当您创建服务类时,您将在类级别看到事务注释.

PS - '创建'类不等于'生成'.

  • 好吧,如果你有一些额外的时间,然后为你需要的东西生成代码,并尝试自己实现相同的一件事.请记住基于ajax的表格和内容将成为您在Grails之旅中最好的朋友.并且在生成的代码中没有使用任何ajax内容.你也可以获得像formRemote这样的ajax的gsp标签的帮助,并逐步学习它们.此外,您需要使用`render someResultVariable as JSON'以JSON(最简单的方式)发回您的数据. (2认同)