Java CriteriaBuilder即时到postgres时间戳转换
我有一个Postrges DB表,它在时间戳处创建了一列Java CriteriaBuilder即时到postgres时间戳转换,java,postgresql,hibernate,jpa,criteria-api,Java,Postgresql,Hibernate,Jpa,Criteria Api,我有一个Postrges DB表,它在时间戳处创建了一列,没有时区。 在此表中,有一条时间戳为2020-02-15 00:00:00的记录。 在hibernate实体中,此字段映射如下: @Column(name = "created_at", updatable = false) @CreationTimestamp private Instant createdAt; 我正在尝试使用criteriapi查询记录。我以这种方式形成查询: criteriaBuilder.greaterThan
,没有时区。
在此表中,有一条时间戳为2020-02-15 00:00:00
的记录。
在hibernate实体中,此字段映射如下:
@Column(name = "created_at", updatable = false)
@CreationTimestamp
private Instant createdAt;
我正在尝试使用criteriapi
查询记录。我以这种方式形成查询:
criteriaBuilder.greaterThanOrEqualTo(rootEntity.get("created_at"), Instant.ofEpochSecond(1581724800L).truncatedTo(ChronoUnit.DAYS))
编号1581724800L
对应于2020-02-15 00:00:00
,因此它应该可以工作。但是,此查询不会返回我正在查找的记录。
查看数据库日志,我发现实际上它查询时间戳2020-02-15 03:00:00
。因此,即使我在查询中使用了Instant
并且DB字段是TIMESTAMP WITHOUT TIMEZONE
,它也会将时间戳转换为分区时间戳
有什么问题吗?我做错了什么?看起来hibernate会以某种方式改变时间并切换到不同的时区。可能尝试将其设置为UTCspring.jpa.properties.hibernate.jdbc.time_zone=UTC
,或者尝试设置不同的时区,查看查询中的时间是否也会更改这可能是时区问题吗?看起来hibernate以某种方式改变了时间,并转移到不同的时区。也许可以尝试将其设置为UTCspring.jpa.properties.hibernate.jdbc.time\u zone=UTC
,或者尝试设置不同的时区,看看查询中的时间是否也发生变化。这肯定是一个时区问题,因为我在UTC+3时区。有了这个属性,这就行了。我有点困惑,因为我使用的是没有时区的Instant
,DB列没有时区。请把评论作为回答,我会接受的。如果你能解释为什么会这样,我会非常感激。我也不知道为什么会这样,也不知道具体发生在哪里(我猜是在hibernate的某个地方),但我也有同样的问题,所以听起来很熟悉