srk*_*srk 3 playframework playframework-2.0
我正在尝试将我的Play应用程序与数据库连接,我正在遵循controller-> service-> DAO图层样式.
应该在哪里放置@Transactional注释.在控制器操作方法中,还是可以将其放在服务层类级别/方法级别中.
我尝试在一个Service层类的方法中保留@Transactional注释,并且它抛出了运行时错误.
[RuntimeException:在上下文中找不到EntityManager.尝试使用@ play.db.jpa.Transactional]注释您的操作方法
那么,我们是否只能在控制器操作之上使用@Transactional?我正在使用播放2.4.2版本.如果是,为什么?当我在服务层调用我的DAO时,实际的数据库操作将在服务层开始而不是在控制器中我想.在控制器中,我只是调用服务层.
我建议不要使用@Transactional,因为它将整个操作包装在JPA事务中.更接近db调用启动事务会更有效.
我更喜欢在服务级别启动事务.另外需要注意的是,db调用是一个阻塞进程,因此必须在默认操作上下文之外执行.
看看简单的DAO +服务示例 https://gist.github.com/dzagorovsky/b8064c97ba647ed453ab
另请阅读有关播放线程池的信息,请访问https://www.playframework.com/documentation/2.4.x/ThreadPools#Using-other-thread-pools
此处描述的阻止代码(db调用)处理:https://www.playframework.com/documentation/2.3.x/JavaAsync
| 归档时间: |
|
| 查看次数: |
2477 次 |
| 最近记录: |