我在数据库中有一个类型为timestamp
的列,其精度有时为纳秒,最高可达6位数字,例如2012-09-17 18:47:52.123456
,我正设法在jOOQrecord
中成功检索到该列的值(即以正确的精度(。然而,当使用into
方法将该jOOQrecord
转换为POJO时,该值映射到LocalDateTime
,其中时间戳分数的分数被减少到3,即2012-09-17 18:47:52.123
。
不确定我是做错了什么,还是这是一个真正的问题。我只是想问,除了实现自定义转换器外,还有其他解决方案可以实现吗?例如配置?
很明显,jOOQ 3.15.1、3.14.13中有一个错误,应该修复:https://github.com/jOOQ/jOOQ/issues/12225
反射转换不是调用保持纳秒精度的Timestamp::toLocalDateTime
,而是首先提取Timestamp::getTime
(毫秒精度的时间戳(,然后将其转换为LocalDateTime
,有效地将时间戳截断为TIMESTAMP(3)
。
如果您在代码生成器中使用SQLDataType.LOCALDATETIME
数据类型,则不会发生这种情况,这只是使用这种反射逻辑的Record.into(Class)
调用的产物。