如何在 Slick 3.x 中进行从 LocalDateTime 到 SQL-DateTime 的范围保留映射?
How to do a range-preserving mapping from LocalDateTime to SQL-DateTime in Slick 3.x?
我想避免在我的模式中使用 TIMESTAMP 列,而是使用 DATETIME,因为前者的范围有限(请参阅 Year 2038 problem)。因此,我这样定义我的专栏
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
)
这行得通,但是通过使用 java.sql.Timestamp 我仍然受限于范围,即使我的数据库列是 DATETIME。我尝试使用基于字符串的映射,但它不起作用:
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"))
)
由于某些原因,插入语句失败(调用 Futures onFailure 回调)。我想知道一个工作范围保持映射器会是什么样子。有什么想法吗?
好的第 1 课:阅读错误消息。
学习了如何在播放回调中显示异常消息后,我得到了这个:
Field DayOfYear cannot be printed as the value 157 exceeds the maximum print width of 2
原来我的日期时间格式是垃圾。正如可以阅读 here,格式必须是 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"))
)
我想避免在我的模式中使用 TIMESTAMP 列,而是使用 DATETIME,因为前者的范围有限(请参阅 Year 2038 problem)。因此,我这样定义我的专栏
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
)
这行得通,但是通过使用 java.sql.Timestamp 我仍然受限于范围,即使我的数据库列是 DATETIME。我尝试使用基于字符串的映射,但它不起作用:
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"))
)
由于某些原因,插入语句失败(调用 Futures onFailure 回调)。我想知道一个工作范围保持映射器会是什么样子。有什么想法吗?
好的第 1 课:阅读错误消息。
学习了如何在播放回调中显示异常消息后,我得到了这个:
Field DayOfYear cannot be printed as the value 157 exceeds the maximum print width of 2
原来我的日期时间格式是垃圾。正如可以阅读 here,格式必须是 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"))
)