将Rep [Option [ZonedDateTime]]与ZonedDateTime进行比较

时间:2018-10-07 23:57:49

标签: java scala slick

我正在尝试将ZonedDateTime与以下代码进行比较:

val now = ZonedDateTime.now()

val query = for {
  x <- xTable.query if x === id
  if x.starts.isAfter(now) // Doesn't work
} yield x

...slick.run(query.result)

但是似乎我无法访问.isAfter,因为x.startsRep[Option[...]],有没有更好的方法来完成我要实现的目标?

1 个答案:

答案 0 :(得分:1)

根据您的描述,听起来好像缺少合适的列类型映射。对于日期/时间schemas,Slick仅支持基于JDBC的java.sql.{Date, Time, Timestamp}。无论在何处使用ZonedDateTime,您都需要一个隐式映射器。映射器应如下所示:

import java.sql.Timestamp
import java.time.ZonedDateTime
import scala.slick.driver.JdbcProfile.MappedColumnType

implicit val zonedDateTimeMapper = MappedColumnType.base[ZonedDateTime, Timestamp](
  zdt => Timestamp.from(zdt.toInstant),
  ts => ZonedDateTime.ofInstant(ts.toInstant, ZoneOffset.UTC)
)