【发布时间】:2012-06-29 01:54:33
【问题描述】:
尝试删除一批记录时,仅删除奇数行!
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
但是,变异版本为什么或如何只影响奇数行?
【问题讨论】:
-
虽然我不知道在这种特殊情况下发生了什么,但它是链表的一个非常常见的问题:当您尝试在迭代时删除时,您删除一个,然后迭代一个,然后删除一个等。剩下一半的列表。可变集合上的任何迭代器都可能遇到此问题,具体取决于它的创建方式。我不知道这里有哪些可供您使用的替代策略 - 使用链表,您只需删除即可解决问题,并让删除本身遍历整个列表。
-
@RexKerr 必须与您所描述的类似。另一种方法是创建一个不调用 MutatingUnitInvoker 的查询(由准备好的语句表达式生成的查询类型,如 createFinderBy 和通过参数 [T] 绑定的表达式)
-
@RexKerr 看起来你已经得到了唯一的答案,我会这样发布并获得一些支持:)
-
@AnthonyMastrean - 这个问题没有得到正确回答,所以我宁愿把它留在 cmets 中。 (这不像我缺乏声誉。)
标签: scala scalaquery