仅在光滑3.0更新中更新非None案例类值

时间:2015-06-30 21:45:06

标签: scala slick case-class

我有一组简单的case类,每个类都有许多属性可选:

case class Person (name: Option[String], age: Option[Int], etc)

当提供所有案例类属性(非 - 无)时,光滑的更新代码工作正常 - 我只是在更新查询中使用案例类实例。

问题是,在很多情况下,任何属性组合都可能是None。我不想为每个组合编写特定的更新查询方法。

如何在光滑的更新查询中使用案例类,以便仅更新表中的非None属性值并使其他值保持不变(不尝试将它们设置为null)?

1 个答案:

答案 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仅在以前定义过时才设置它。