尝试删除一批记录时,只删除奇数行!
val byUser = Orders.createFinderBy(_.userID)
byUser(id).mutate(_.delete)
Run Code Online (Sandbox Code Playgroud)
如果我改为打印记录,我会得到正确的行数.
byUser(id).mutate{x => x.echo}
Run Code Online (Sandbox Code Playgroud)
我解决了这个问题,它生成了所需的SQL.
(for{o <- Orders if o.userID is id.bind } yield o).delete
Run Code Online (Sandbox Code Playgroud)
但是,mutate版本为何或如何仅影响奇数行?
我深入研究了源代码,似乎正如 @RexKerr 所说 - 迭代器用于处理元素,在迭代时应用删除(此处 mutate 方法中的 while 循环):
https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/MutatingInvoker.scala
有趣的是,有一个 previousAfterDelete 标志可用于在每次删除后强制迭代器向后移动。对于 Access 数据库(请参阅 AccessQueryInvoker 类),这似乎设置为 true,但其他数据库则不然:
我建议下载源代码并调试代码。也许应该为您正在使用的数据库供应商设置此标志。我还考虑提交错误报告:
http://scalaquery.org/community.html
附言。我知道这是一个老问题,但回答它以防其他人遇到这个问题
| 归档时间: |
|
| 查看次数: |
376 次 |
| 最近记录: |