cat*_*h22 15 java postgresql java-time java-15
我有一个关于映射Instant到 PostgreSQL 的最佳实践问题TIMESTAMP。
我们已将应用程序更新到 Java 15,系统时钟的新增强功能为纳秒精度 ( https://bugs.openjdk.java.net/browse/JDK-8242504 ) 与 Postgres 中的 TIMESTAMP 限制不兼容。时间根据底层操作系统的不同而不同,Mac (Big Sur) 中的 Instant 不提供以纳秒为单位的时间,但 Linux 中提供。
我们在代码库中使用即时类型。我们的测试正在比较内存中的 Instant 类型的对象与获取的对象,因此它们会失败,具体取决于它们运行的操作系统。
在Linux中,内存中的Instant对象的精度为纳秒,而Postgres存储的Instant(TIMESTAMP)的精度为微秒。断言失败:
java.lang.AssertionError: expected [2021-01-04T19:32:23.726475249Z] but found [2021-01-04T19:32:23.726475Z]
Run Code Online (Sandbox Code Playgroud)
在 Mac 中,Instant 对象的精度为微秒,与 Postgres 的时间戳精度充分一致,因此测试会像迄今为止所做的那样通过。
我们希望避免截断 Instant 或向 PG 添加插件来支持纳秒。
其他人如何以稳健、全面的方式处理这个问题?
| 归档时间: |
|
| 查看次数: |
2260 次 |
| 最近记录: |