我创建了一个通用方法来更新Slick表中列的值。我的所有表都来自具有id
的共同特征,所以很容易想出这样的东西:
def update[T](id: Long, targetColumnSelector: SimpleTable => Column[T], value: T): Boolean = {
db.withSession {
self.filter(_.id === id).map(targetColumnSelector).update(value) > 0
}
}
并像这样调用:
MyTable.update(obj.id, _.field, fieldValue)
现在我想概括一下,一次更新多个列。它很容易为2列,但如何使它,以便我可以使用任何大小的元组?我正在使用Slick 2.0
def updateTuple[B, C](id: Long, targetColumnSelector: SimpleTable => (Column[B], Column[C]), value: (B, C)): Boolean = {
db.withSession {
self.filter(_.id === id).map(targetColumnSelector).update(value) > 0
}
}