У меня есть таблица JOURNAL, в которой столбец INSERT_DATE должен быть заполнен БД текущей датой и временем, когда запись вставлена. Я специально не использовал тип TIMESTAMP из-за его ограниченного диапазона.
class Journal(tag: Tag) extends Table[JournalEntry](tag, "JOURNAL") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def insertDate = column[OffsetDateTime]("INSERT_DATE", SqlType("DateTime default CURRENT_TIMESTAMP"))(localDateTimeColumnType)
def valueDate = column[OffsetDateTime]("VALUE_DATE", SqlType("DateTime"))(localDateTimeColumnType)
def amount = column[Int]("AMOUNT")
def note = column[String]("NOTE", O.Length(100))
def * : ProvenShape[JournalEntry] = (id.?, insertDate.?, valueDate, amount, note)
<> ((JournalEntry.apply _).tupled, JournalEntry.unapply)
}
Я также реализую класс case:
case class JournalEntry(id: Option[Int], insertDate: Option[LocalDateTime],
valueDate: LocalDateTime, amount: Int, note: String)
Когда мое приложение запускается, я заполняю БД случайными тестовыми данными:
TableQuery[Journal] ++= Seq.fill(1000)(JournalEntry(None, Some(LocalDateTime.now()),
LocalDateTime.of(2006 + Random.nextInt(10), 1 + Random.nextInt(11),
1 + Random.nextInt(27),Random.nextInt(24), Random.nextInt(60)), Random.nextInt(),
TestDatabase.randomString(100)))
Это работает, но INSERT_DATE устанавливается JVM, а не базой данных. В документах Slick говорится, что столбцы следует опускать, если вы хотите, чтобы было вставлено значение по умолчанию. Но я просто не понимаю, как я опускаю столбцы, если у меня есть класс case.
Я также нашел этот SO post, но мог не понять, как использовать его в моем контексте.
Любые идеи?