我想用一个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")
)
}
但它也忽略了钩子。
在使用挂钩和验证时,我似乎无法找到一次更新多个文档的方法。至少有一些解决方法吗?
答案 0 :(得分:1)
当您进行部分更新时,您正在更新符合条件的一些未知数量的记录,而不会检索它们。然而,为了触发钩子,需要知道(即检索)更新的对象。我能想到的最好的选择是检索你正在更新的所有对象,然后使用batch update而不是部分更新。这不会像您正在进行的部分更新一样快速或高效,但除非您可以在数据库中注册您的钩子,否则我不知道替代方案会是什么。