使用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使用TableQuery[CacheTable].ddl.create
创建timstamp列?
我们是以错误的方式接近这个吗?我们肯定不希望ts出现在CacheEntry中(在这种情况下我们可以忍受它,但是我们有更复杂的情况,这是不可取的)
答案 0 :(得分:0)
您可以定义case class TimestampedEE](entry: E, timestamp: LocalDateTime)
之类的内容,并将CacheTable
更改为Table[Timestamped[CacheEntry]]
。 def *
预测可能看起来很难看(如果不依赖于某些无形的魔法),但这是一种方法。