Slick 3在自定义SourceCodeGenerator中使用自定义MappedColumnType

时间:2018-02-28 10:26:26

标签: scala code-generation slick slick-3.0

我有使用默认server/editSupplier.jsp的自定义源代码生成器,我希望它在处理PostgresProfile类型时生成java.time.OffsetDateTime列。我已经到了使用rawType但我不明白我应该覆盖什么才能使用导入的隐式映射器。

当我运行codegen任务时,它会导入java.sql.Timestamp,但这样就可以了。生成的列继续为SlickColumnMappers

这对我来说是一个主要障碍。非常感谢帮助。

映射

java.sql.Timestamp

源代码生成器

object SlickColumnMappers {
  implicit val TimestampToOffsetDateTime = MappedColumnType.base[OffsetDateTime, Timestamp](
    dt => Timestamp.from(dt.withOffsetSameInstant(ZoneOffset.UTC).toInstant),
    ts => OffsetDateTime.ofInstant(ts.toInstant, ZoneOffset.UTC)
  )
}

1 个答案:

答案 0 :(得分:0)

列映射允许您在Row模型中使用自定义类,但不会影响代码生成。要更改代码生成,您需要覆盖Table

中的SourceCodeGenerator方法
  override def Table = new Table(_) {


    override def Column = new Column(_){
      override def rawType = {
        val superRawType = super.rawType
        superRawType match {
          case "java.sql.Timestamp" => "java.time.ZonedDateTime"
          case "java.sql.Date" => "java.time.LocalDate"
          case x => x
        }
      }
}