Slick - 创建投影中不存在的列

3
当使用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 创建时间戳列?

我们是否采用了错误的方法? 我们绝对不希望ts出现在CacheEntry中(在这种情况下,我们可以接受它,但我们有更复杂的情况,这是不可取的)

1个回答

0
你可以定义一个类似于case class TimestampedEE](entry: E, timestamp: LocalDateTime)的东西,并将你的CacheTable更改为Table[Timestamped[CacheEntry]]。如果不依赖于一些shapeless魔法,def *投影可能看起来很丑,但这是一种方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接