Slick - создайте столбцы, которых НЕТ в проекции

При использовании tableQuery.ddl.create создаются только столбцы в проекции. Однако в нашем случае есть столбцы, которые используются ТОЛЬКО для фильтрации и/или упорядочивания, поэтому они не являются частью проекции, но их необходимо создать:

case class CacheEntry(source: String, destination: String, hops: Int)

class CacheTable(tag: Tag) extends Table[CacheEntry](tag, "cache") {

  def source        = column[String]("source")
  def destination   = column[String]("dest")
  def hops          = column[Int]("hops")
  def timestamp     = column[LocalDateTime]("ts", O.DBType("timestamp default now"))

  def * = (source, destination, hops) <> ((CacheEntry.apply _).tupled, CacheEntry.unapply)
}

Как мы можем убедить Slick создать столбец timstamp с TableQuery[CacheTable].ddl.create?

Подходим ли мы к этому неправильно? Мы определенно НЕ хотим, чтобы ts отображались в CacheEntry (мы могли бы жить с этим в этом случае, но у нас есть более сложные случаи, когда это нежелательно)


person Ákos Vandra    schedule 16.10.2015    source источник


Ответы (1)


Вы можете определить что-то вроде case class TimestampedEE](entry: E, timestamp: LocalDateTime) и изменить CacheTable на Table[Timestamped[CacheEntry]]. Проекция def *, вероятно, будет выглядеть уродливо (если не полагаться на какую-то бесформенную магию), но это один из способов сделать это.

person OlivierBlanvillain    schedule 16.10.2015