Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java CriteriaBuilder即时到postgres时间戳转换_Java_Postgresql_Hibernate_Jpa_Criteria Api - Fatal编程技术网

Java CriteriaBuilder即时到postgres时间戳转换

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

我有一个Postrges DB表,它在时间戳处创建了一列
,没有时区。
在此表中,有一条时间戳为
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会以某种方式改变时间并切换到不同的时区。可能尝试将其设置为UTC
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
,或者尝试设置不同的时区,查看查询中的时间是否也会更改

这可能是时区问题吗?看起来hibernate以某种方式改变了时间,并转移到不同的时区。也许可以尝试将其设置为UTC
spring.jpa.properties.hibernate.jdbc.time\u zone=UTC
,或者尝试设置不同的时区,看看查询中的时间是否也发生变化。这肯定是一个时区问题,因为我在UTC+3时区。有了这个属性,这就行了。我有点困惑,因为我使用的是没有时区的
Instant
,DB列没有时区。请把评论作为回答,我会接受的。如果你能解释为什么会这样,我会非常感激。我也不知道为什么会这样,也不知道具体发生在哪里(我猜是在hibernate的某个地方),但我也有同样的问题,所以听起来很熟悉