我正在使用 Slick 3.1.0-M2,我希望在我的表中使用 java.time.LocalDate 和 java.time.LocalTime。我这样做:
import java.sql.{Date, Time, Timestamp}
import java.time.{LocalDate, LocalTime, LocalDateTime, ZoneOffset}
trait DateTimeColumns {
import slick.driver.PostgresDriver.api._
implicit val localDateTimeColumnType = MappedColumnType.base[LocalDateTime, Timestamp](
d => Timestamp.from(d.toInstant(ZoneOffset.ofHours(0))),
d => d.toLocalDateTime
)
implicit val dateColumnType = MappedColumnType.base[LocalDate, Date](
d => Date.valueOf(d),
d => d.toLocalDate
)
implicit val timeColumnType = MappedColumnType.base[LocalTime, Time](
localTime => Time.valueOf(localTime),
time => time.toLocalTime
)
}
所以我有 3 个隐式映射,但只有第一个可以编译。带有 java.sql.Date 和 java.sql.Time 的那些编译失败:
could not find implicit value for evidence parameter of type slick.driver.PostgresDriver.BaseColumnType[java.sql.Date]
当我在 IntelliJ 中进行隐式参数检查时,我可以看到第一个映射在文件 JdbcTypesComponent.scala 中找到 TimestampJdbcType。在旁边,我看到了 TimeJdbcType 和 DateJdbcType。那么为什么第一个被发现了,而其他的却没有呢?