如何在scala-activerecord中进行批量更新

时间:2015-04-17 14:59:06

标签: scala activerecord orm sql-update squeryl

我想用一个SQL查询更新数据库中的多个记录。方法forceUpdate可以像这样使用:

case class Document(size: Int, var status: String) extends ActiveRecord
object Document extends ActiveRecordCompanion[Document]

Document.forceUpdate(_.size < 100)(_.status := "small")

然而,它绕过了beforeSave()之类的验证和挂钩。我试过底层的squeryl:

Document.inTransaction {
  update(Document.table)(d =>
    where(d.size < 100)
    set(d.status := "small")
  )
}

但它也忽略了钩子。

在使用挂钩和验证时,我似乎无法找到一次更新多个文档的方法。至少有一些解决方法吗?

1 个答案:

答案 0 :(得分:1)

当您进行部分更新时,您正在更新符合条件的一些未知数量的记录,而不会检索它们。然而,为了触发钩子,需要知道(即检索)更新的对象。我能想到的最好的选择是检索你正在更新的所有对象,然后使用batch update而不是部分更新。这不会像您正在进行的部分更新一样快速或高效,但除非您可以在数据库中注册您的钩子,否则我不知道替代方案会是什么。