Mar*_*vic 2 java postgresql assertj spring-data-jdbc
给定 Java 中的以下字段:
private Instant createdDate = Instant.now();
Run Code Online (Sandbox Code Playgroud)
对应Postgres中的以下字段:
created_date TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP;
Run Code Online (Sandbox Code Playgroud)
并使用 Spring Data JDBC CrudRepository save(S实体)保存到数据库。
检查原始对象字段和保存的对象字段是否相等时:
assertThat(original_obj.getCreatedDate()).isEqualTo(database_obj.getCreatedDate());
Run Code Online (Sandbox Code Playgroud)
我得到以下不匹配:
org.opentest4j.AssertionFailedError:
expected: 2023-05-29T10:41:12.555839137Z
but was: 2023-05-29T10:41:12.555839Z
Run Code Online (Sandbox Code Playgroud)
看起来Instant从数据库加载的数字比原始 Instant 少了 3 位。
我怎样才能使两个时刻匹配?为什么它们不同?
Java Time 存储时间的精度高达 1纳秒,而 Postgres 存储微秒。
您可以按照评论中的建议允许比较中的增量,或者..如果您不关心这些纳秒,更简单的解决方案是截断 Java 中的日期:
Instant createdDate = Instant.now().truncatedTo(ChronoUnit.MICROS)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |