我从光滑的测试中找到了这个例子:
https ://github.com/slick/slick/blob/master/slick-testkit/src/main/scala/com/typesafe/slick/testkit/tests/MapperTest.scala
sealed trait Bool
case object True extends Bool
case object False extends Bool
implicit val boolTypeMapper = MappedColumnType.base[Bool, String](
{ b =>
assertNotNull(b)
if(b == True) "y" else "n"
}, { i =>
assertNotNull(i)
if(i == "y") True else False
}
)
但我正在尝试为 org.joda.time.DateTime 与 java.sql.Timestamp 创建一个 TypeMapper - 但没有太大成功。Bool 示例非常特殊,我无法适应它。Joda Time 非常常见 - 所以任何帮助将不胜感激。
为了清楚起见,我正在使用插值 sql"""select colA,colB from tableA where id = ${id}""" 等。在进行选择时,系统通过在隐式 GetResult 转换器中使用 jodaDate 类型运行良好。
但是,对于插入,似乎没有办法进行隐式转换,或者它忽略了答案 #1 中提供的以下代码 - 与以前相同的错误:找不到参数 pconv 的隐式值:scala.slick.jdbc .SetParameter[(Option[Int], String, String, Option[org.joda.time.DateTime])]
我没有使用带注释的 Table 对象的 Lifted 样式 Slick 配置,这可能就是它没有找到/使用 TypeMapper 的原因