【问题标题】:Create custom column mapping for java.time.LocalDate with Slick使用 Slick 为 java.time.LocalDate 创建自定义列映射
【发布时间】:2015-09-07 19:01:11
【问题描述】:

我正在使用 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。那么为什么第一个被发现了,而其他的却没有呢?

【问题讨论】:

    标签: scala slick slick-3.0


    【解决方案1】:

    如果您检查 slick.driver.JdbcTypesComponent,您会发现 trait ImplicitColumnTypes 包含许多列类型的隐含,包括:

    implicit def timeColumnType = columnTypes.timeJdbcType
    implicit def dateColumnType = columnTypes.dateJdbcType
    

    您定义的后两个实际上与默认名称同名

    在导入时更改它们的名称或重命名默认名称对我有用。

    import slick.driver.PostgresDriver.api._
    import slick.driver.PostgresDriver.api.{ timeColumnType => DefaultTimeColumnType }
    
    implicit val myDateColumnType = MappedColumnType.base[LocalDate, Date](
        ld => Date.valueOf(ld),
        d => d.toLocalDate
    )
    
    implicit val timeColumnType = MappedColumnType.base[LocalTime, Time](
        localTime => Time.valueOf(localTime),
        time => time.toLocalTime
    )
    

    【讨论】:

    • 啊,我想我永远不会发现这个错误,非常感谢! :)
    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    相关资源
    最近更新 更多