Я использую Slick 3.2 в своем приложении Scala.
В моем приложении все таблицы имеют created_at
и updated_at
в качестве полей.
Например, таблица users
имеет created_at
и updated_at
.
Я хочу обновить updated_at
неявно, когда я обновляю эти таблицы через Slick, реализуя метод расширения.
Есть ли способ реализовать такой метод?
package com.example
object Main {
import slick.jdbc.MySQLProfile.api._
import java.time.Instant
import slick.jdbc.JdbcType
import java.sql.Timestamp
implicit val instantColumnType: JdbcType[Instant] with BaseTypedType[Instant] = ??? // definition is omitted.
case class User(id: Int, name: String, mail: String, createdAt: Instant, updatedAt: Instant)
abstract class AppTable[T](tag: Tag, tableName: String) extends Table[T](tag, tableName) {
def createdAt = column[Instant]("created_at")
def updatedAt = column[Instant]("updated_at")
}
class UserTable(tag: Tag) extends AppTable[User](tag, "users") {
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def mail = column[String]("mail")
def * = (id, name, mail, createdAt, updatedAt) <> ((User.apply _).tupled, User.unapply)
}
val users: TableQuery[UserTable] = ??? // instantiation of users is omitted.
def main(args: Array[String]): Unit = {
// This needs to execute SQL like
// UPDATE users SET name = 'foo', mail = 'bar@example.com', updated_at = '2019-06-02T02:27:43'
users
.filter(record => record.id === 42)
.updateExtra(
record => (record.name, record.mail),
("foo", "bar@example.com"),
)
}
}