我使用默认的
PostgresProfile
我想让它产生
java.time.OffsetDateTime
处理时的列
java.sql.Timestamp
类型。我已经开始使用rawType了,但我不知道应该覆盖什么才能使用导入的隐式映射器。
当我运行codegen任务时,它会导入
SlickColumnMappers
但就这么多了。生成的列继续为
Java语言sql。时间戳
.
这一直是我的主要障碍。非常感谢您的帮助。
映射器
object SlickColumnMappers {
implicit val TimestampToOffsetDateTime = MappedColumnType.base[OffsetDateTime, Timestamp](
dt => Timestamp.from(dt.withOffsetSameInstant(ZoneOffset.UTC).toInstant),
ts => OffsetDateTime.ofInstant(ts.toInstant, ZoneOffset.UTC)
)
}
源代码生成器
new SourceCodeGenerator(model) {
override def Table = new Table(_) {
override def code: Seq[String] = Seq(
"import helpers.SlickColumnMappers._"
) ++ super.code
override def Column = new Column(_) {
override def defaultCode = v => {
def raw(v: Any) = rawType match {
case "String" => "\"" + v + "\""
case "Long" => v + "L"
case "Float" => v + "F"
case "Char" => "'" + v + "'"
case "scala.math.BigDecimal" => s"scala.math.BigDecimal($v)"
case "Byte" | "Short" | "Int" | "Double" | "Boolean" => v.toString
}
v match {
case Some(x) => s"Some(${raw(x)})"
case None => "None"
case x => raw(x)
}
}
}
}
}