CriteriaBuilder Instant 到 postgres TIMESTAMP 转换
CriteriaBuilder Instant to postgres TIMESTAMP conversion
我有一个 Postrges 数据库 table,其中有一列 created_at TIMESTAMP WITHOUT TIMEZONE
。
在这个table中,有一个时间戳为2020-02-15 00:00:00
的记录。
在休眠实体中,该字段映射如下:
@Column(name = "created_at", updatable = false)
@CreationTimestamp
private Instant createdAt;
我正在尝试使用 CriteriaAPI
查询记录。我以这种方式形成查询:
criteriaBuilder.greaterThanOrEqualTo(rootEntity.get("created_at"), Instant.ofEpochSecond(1581724800L).truncatedTo(ChronoUnit.DAYS))
数字1581724800L
对应2020-02-15 00:00:00
,所以应该可以。但是,此查询没有 return 我要查找的记录。
查看数据库日志,我发现它实际上查询的是时间戳 2020-02-15 03:00:00
。因此,即使我在查询中使用 Instant
并且数据库字段是 TIMESTAMP WITHOUT TIMEZONE
,它也会将时间戳转换为分区时间戳。
可能是什么问题,我在这里做错了什么?
看起来休眠以某种方式改变了时间并转移到不同的时区。也许尝试将其设置为 UTC spring.jpa.properties.hibernate.jdbc.time_zone = UTC
或尝试设置不同的时区并查看查询中的时间是否也发生变化
我有一个 Postrges 数据库 table,其中有一列 created_at TIMESTAMP WITHOUT TIMEZONE
。
在这个table中,有一个时间戳为2020-02-15 00:00:00
的记录。
在休眠实体中,该字段映射如下:
@Column(name = "created_at", updatable = false)
@CreationTimestamp
private Instant createdAt;
我正在尝试使用 CriteriaAPI
查询记录。我以这种方式形成查询:
criteriaBuilder.greaterThanOrEqualTo(rootEntity.get("created_at"), Instant.ofEpochSecond(1581724800L).truncatedTo(ChronoUnit.DAYS))
数字1581724800L
对应2020-02-15 00:00:00
,所以应该可以。但是,此查询没有 return 我要查找的记录。
查看数据库日志,我发现它实际上查询的是时间戳 2020-02-15 03:00:00
。因此,即使我在查询中使用 Instant
并且数据库字段是 TIMESTAMP WITHOUT TIMEZONE
,它也会将时间戳转换为分区时间戳。
可能是什么问题,我在这里做错了什么?
看起来休眠以某种方式改变了时间并转移到不同的时区。也许尝试将其设置为 UTC spring.jpa.properties.hibernate.jdbc.time_zone = UTC
或尝试设置不同的时区并查看查询中的时间是否也发生变化