gpt4 book ai didi

playframework - 在 Play 中放置@Transactional 注释的位置

转载 作者:行者123 更新时间:2023-12-04 05:50:33 25 4
gpt4 key购买 nike

我正在尝试将我的 Play 应用程序与数据库连接,我遵循 Controller ->服务->DAO 层样式。

@Transactional 注解应该放在哪里。在 Controller 操作方法中,或者我可以将它放在服务层类级别/方法级别中。

我尝试将 @Transactional 注释保留在服务层类的方法之一中,但它引发了运行时错误。

[RuntimeException: No EntityManager found in the context. Try to annotate your action method with @play.db.jpa.Transactional]

那么,我们是否必须仅在 Controller 操作之上使用@Transactional?我正在使用 play 2.4.2 版本。如果是,为什么?当我在服务层调用我的 DAO 时,我猜实际的数据库操作将在服务层开始,而不是在 Controller 中。在 Controller 中,我只是调用服务层。

最佳答案

我建议不要使用 @Transactional,因为它将整个操作包装在 JPA 事务中。在靠近数据库调用的地方开始事务会更有效率。

我更喜欢在服务级别开始交易。另外需要注意的是,db 调用是一个阻塞过程,因此它必须在默认操作上下文之外执行。

看看简单的 DAO+服务示例 https://gist.github.com/dzagorovsky/b8064c97ba647ed453ab

另请阅读此处的线程池 https://www.playframework.com/documentation/2.4.x/ThreadPools#Using-other-thread-pools

此处描述的阻塞代码(数据库调用)处理:https://www.playframework.com/documentation/2.3.x/JavaAsync

关于playframework - 在 Play 中放置@Transactional 注释的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32443032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com