如何在Slick 3.x中从LocalDateTime到SQL-DateTime进行保留范围的映射?

宾福德

由于前者的范围有限,请避免在我的架构中使用TIMESTAMP列,而应使用DATETIME(请参阅2038年问题)。因此,我像这样定义了我的专栏

def valueDate = column[LocalDateTime]("VALUE_DATE", SqlType("DateTime"))(localDateTimeColumnType)

并提供了一个隐式映射(我从网络上找到了它):

implicit val localDateTimeColumnType = MappedColumnType.base[LocalDateTime, Timestamp](
  d => Timestamp.from(d.toInstant(ZoneOffset.ofHours(0))),
  d => d.toLocalDateTime
)

这行得通,但是即使使用DB列是DATETIME ,使用java.sql.Timestamp仍然会受到范围限制的困扰。我尝试使用基于字符串的映射,但是它不起作用:

implicit val localDateTimeColumnType = MappedColumnType.base[LocalDateTime, String](
  d => d.format(DateTimeFormatter.ofPattern("YYYY-MM-DD HH:MM:SS")),
  d => LocalDateTime.parse(d, DateTimeFormatter.ofPattern("YYYY-MM-DD HH:MM:SS"))
)

由于某些原因,insert语句失败(调用Futures onFailure回调)。我想知道工作范围保持不变的映射器会是什么样子。有任何想法吗?

宾福德

确定课程1:阅读错误消息。

学习了如何在播放回调中显示异常消息后,我得到了以下信息:

无法打印字段DayOfYear,因为值157超过了最大打印宽度2

原来,我的DateTime格式是垃圾。可以在这里看到,格式必须为yyyy-MM-dd HH:mm:ss而不是YYYY-MM-DD HH:MM:SS正确的映射如下所示:

implicit val localDateTimeColumnType = MappedColumnType.base[LocalDateTime, String](
    d => d.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")),
    d => LocalDateTime.parse(d, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章