如果应用程序使用另一个时区而不是MySQL,则Hibernate会保存/检索日期减去日期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如果应用程序使用另一个时区而不是MySQL,则Hibernate会保存/检索日期减去日期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1727字,纯文字阅读大概需要3分钟。
内容图文
我在MACHINE_A上使用时区GMT 3在tomcat上启动了一个应用程序.
我使用带有时区UTC的MACHINE_B上启动的远程MySQL服务器.
我们使用spring-data-jpa来表示持久性.
作为问题的一个例子,我将展示存储库:
public interface MyRepository extends JpaRepository<MyInstance, Long> {
Optional<MyInstance> findByDate(LocalDate localDate);
}
如果我通过localDate 2018-09-06,我得到的实体的日期是2018-09-05(前一天)
在日志中我看到:
2018-09-06 18:17:27.783 TRACE 13676 --- [nio-8080-exec-3] o.h.type.descriptor.sql.BasicBinder : binding parameter [1] as [DATE] - [2018-09-06]
我搜索了很多这个问题并找到了几篇内容相同的文章(例如https://moelholm.com/2016/11/09/spring-boot-controlling-timezones-with-hibernate/)
所以,我有以下application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/MYDB?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
username: root
password: *****
jpa:
hibernate:
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true
type: trace
jdbc:
time_zone: UTC
但它没有帮助.
我们使用以下连接器:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.12</version>
</dependency>
我该如何解决我的问题?
附:
我试图用相同的时区运行这两个应用程序.在这种情况下,一切都按预期工作.
P.S.2
我试图使用MySQL驱动程序6.0.6版本但它没有改变任何东西.
解决方法:
如果您在Java中使用LocalDate,则应在MySQL中使用DATE列.这样问题就解决了.
如果您使用LocalDateTime,请尝试在Spring Boot中设置如下属性:
spring.jpa.properties.hibernate.jdbc.time_zone=UTC
有关更详细的说明,请查看this article.您可以在我的High-Performance Java Persistence GitHub repository中找到一个可以正常使用的测试用例.
内容总结
以上是互联网集市为您收集整理的如果应用程序使用另一个时区而不是MySQL,则Hibernate会保存/检索日期减去日期全部内容,希望文章能够帮你解决如果应用程序使用另一个时区而不是MySQL,则Hibernate会保存/检索日期减去日期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。