Java 基于时间戳和即时消息的查询问题
我试图在CriteriaAPI中进行查询,并查找日期大于或等于所提供日期的行 数据库Oracle->hibernate->spring启动应用程序 Oracle列定义:带时区的时间戳 Hibernate配置:jpa.properties.Hibernate.jdbc.time\u zone:UTC 服务器和数据库位于不同的时区 即时列映射Java 基于时间戳和即时消息的查询问题,java,oracle,hibernate,timezone,Java,Oracle,Hibernate,Timezone,我试图在CriteriaAPI中进行查询,并查找日期大于或等于所提供日期的行 数据库Oracle->hibernate->spring启动应用程序 Oracle列定义:带时区的时间戳 Hibernate配置:jpa.properties.Hibernate.jdbc.time\u zone:UTC 服务器和数据库位于不同的时区 即时列映射 criteriaBuilder.greaterThanOrEqualTo(root.get(“date”),this.startDate) 生成的sql:
criteriaBuilder.greaterThanOrEqualTo(root.get(“date”),this.startDate)
生成的sql:
entity0_.date>=?
BasicBinder : binding parameter [7] as [TIMESTAMP] - [2019-10-01T00:11:11Z]
在sqlplus中执行此查询时
select * from plan where date >= TIMESTAMP '2019-10-01 00:11:11 UTC'
我得到了正确的结果,但在hibernate中,我得到了日期为2019-10-01 00:00:00 UTC的附加行,这是不正确的行为
你知道这个代码有什么问题吗
注:对于ZonedDateTime,这是相同的行为猜测,它似乎是将时间戳强制转换为Java中的某个日期,这将删除时间组件,然后强制转换回时间戳,这将导致时间组件设置为午夜。另一种可能的解释是时区问题。它是否也包括午夜前的结果?我找到了一种解决方法,但它并不漂亮,我不知道为什么属性没有涵盖它:-Duser.timezone=UTCGreat!你可以把它贴出来作为你自己问题的答案。