首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Doobie for Scala / Play框架中的事务

Doobie for Scala / Play框架中的事务
EN

Stack Overflow用户
提问于 2020-10-31 08:10:25
回答 1查看 360关注 0票数 1

我有一个关于doobie交易的问题。我看过这里的文档,它看起来一次只能处理一个查询?

有没有可能有这样的东西?

代码语言:javascript
复制
sql'''
begin;
select * from table where id=1 for update;
update table set id=2 where tabletest=2;
commit'''

任何想法或更多的例子/文件,任何人可以指出我将非常感谢!谢谢你!!

EN

回答 1

Stack Overflow用户

发布于 2020-11-01 00:03:46

当您应用Transactor时,您正在事务中运行事务

代码语言:javascript
复制
query.transact(transactor)

但这并不意味着您必须在一行中运行整个事务:

代码语言:javascript
复制
val operations = for {
  myClass <- sql"""SELECT a, b, c, FROM table_x WHERE ...""".query[MyClass].to[List]
  updatedRows <- sql"""UPDATE table_x SET ... WHERE""".update.run
} yield someResult

operations.transact(transctor)

基本上,您可以将每个查询/更新转换为ConnectionIO,它是一个monad -您可以使用Cat中的所有一元/应用/函数式操作- flatMapmapmapNtupled等-将这些ConnectionIO组合成更大的ConnectionIO,并在完成后运行它们(您已经构建了查询,但到目前为止还没有执行它们!)将.transact(transactor)转换为在事务中计算的实际结果。BEGIN-COMMIT-or-ROLLBACK是由那个.transact(transactor)处理的,这就是为什么你不自己编写它的原因。

请参阅带有此FAQDoobie documentation (如何在同一事务中执行多项操作?)尤其是。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64617213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档