【问题标题】:Grails - @Transactional annotation on generating simple ControllerGrails - 生成简单控制器的@Transactional 注释
【发布时间】:2014-08-07 03:48:50
【问题描述】:

Grails 新手在这里。我正在使用 GGTS 为简单的用户模型(字符串用户,字符串传递)生成控制器

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

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

grails 中的新手

【问题讨论】:

    标签: grails


    【解决方案1】:

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

    如果您使用执行某些 DB 事务的服务方法,那么您需要通过 @Transactional 注释使您的控制器操作具有事务性。而服务方法中无需提及。

    如果您不使控制器具有事务性,则需要在服务类中提及它。

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

    附: - “创建”类不等于“生成”。

    【讨论】:

    • 我明白了。感谢您的澄清。我仍然非常依赖生成的代码。希望从中学习。
    • 好的,如果你有一些额外的时间,那就做一件事,然后为你需要的东西生成代码并尝试自己实现。请记住,基于 ajax 的表单和东西将是您在 grails 旅程中最好的朋友。并且在生成的代码中没有使用任何 ajax 的东西。您还可以获得 formRemote 之类的 ajax 表单 gsp 标签的帮助,并逐步学习它们。此外,您还需要使用 render someResultVariable as JSON 以 JSON 格式(最简单的方式)发回您的数据
    猜你喜欢
    • 2014-06-30
    • 1970-01-01
    • 2013-10-24
    • 2013-10-28
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多