我有一组简单的case类,每个类都有许多属性可选:
case class Person (name: Option[String], age: Option[Int], etc)
当提供所有案例类属性(非 - 无)时,光滑的更新代码工作正常 - 我只是在更新查询中使用案例类实例。
问题是,在很多情况下,任何属性组合都可能是None。我不想为每个组合编写特定的更新查询方法。
如何在光滑的更新查询中使用案例类,以便仅更新表中的非None属性值并使其他值保持不变(不尝试将它们设置为null)?
答案 0 :(得分:2)
您可以使用Slick更新指定列:
http://slick.typesafe.com/doc/3.0.0/queries.html#updating
但要实现你想要的目标,我会用两个非常简单的数据库调用来实现:
val row = db.run(q.filter(_.id === id).result.head)
row.copy(name = row.name.map(newName), age = row.age.map(newAge), ...)
db.run(q.update(row))
请注意.map
仅在以前定义过时才设置它。