6

尝试删除一批记录时,只删除奇数行!

val byUser = Orders.createFinderBy(_.userID)
byUser(id).mutate(_.delete)

如果我改为打印记录,我会得到正确的行数。

byUser(id).mutate{x => x.echo}

我解决了这样的问题,它生成了所需的 SQL。

(for{o <- Orders if o.userID is id.bind } yield o).delete

但是,变异版本为什么或如何只影响奇数行?

4

1 回答 1

1

我已经在源代码中进行了挖掘,它似乎就像@RexKerr 所说的那样 - 一个迭代器用于处理元素,在它迭代时应用删除(这里的 mutate 方法中的 while 循环):

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/MutatingInvoker.scala

有趣的是,有一个 previousAfterDelete 标志可用于在每次删除后强制迭代器向后移动。对于 Access 数据库(请参阅 AccessQueryInvoker 类),这似乎设置为 true,但其他数据库则没有:

https://github.com/rjmac/scala-query/blob/master/src/main/scala/org/scalaquery/ql/extended/AccessDriver.scala

我建议下载源代码并调试代码。也许应该为您正在使用的数据库供应商设置此标志。我还考虑提交错误报告:

http://scalaquery.org/community.html

PS。我知道这是一个老问题,但回答它以防万一其他人遇到这个问题

于 2015-04-29T19:07:36.610 回答