Hibernate的JAVA_TIME_USE_DIRECT_JDBC设置是如何工作的

Hibernate的JAVA_TIME_USE_DIRECT_JDBC设置是如何工作的

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

本文介绍了Hypersistence Optimizer工具,旨在自动检测Spring、Jakarta EE或Java EE应用中的性能问题,特别是在JPA和Hibernate数据访问层。通过启用Hibernate的JAVA_TIME_USE_DIRECT_JDBC设置,可以直接使用Java 8的日期时间对象,从而提升性能。但需注意,不同数据库对这些对象的支持情况不同。

🔎

延伸解读

启用方式与配置要点

该设置可通过编程方式在Spring配置中设置,例如在JPA属性中添加AvailableSettings.JAVA_TIME_USE_DIRECT_JDBC为true;也可在Spring Boot的application.properties中声明spring.jpa.properties.hibernate.type.java_time_use_direct_jdbc=true。启用后,Hibernate将使用SetObjectBinder,通过PreparedStatement.setObject方法直接绑定Ja

数据库兼容性差异

不同数据库对Java 8日期时间对象的支持程度不同。Oracle JDBC驱动允许直接传递LocalDateTime、OffsetDateTime和ZonedDateTime。但SQL Server、PostgreSQL和MySQL不支持将ZonedDateTime绑定到TIMESTAMP_WITH_TIMEZONE列。此外,MySQL JDBC驱动8.0.33不支持Types.TIMESTAMP_WITH_TIMEZONE,因此无法使用OffsetDateTime或ZonedDateTime属性。

使用前的检查建议

在启用JAVA_TIME_USE_DIRECT_JDBC设置前,应检查当前JDBC驱动是否支持绑定所有Java日期/时间对象到SQL语句。如果实体包含ZonedDateTime属性且运行在SQL Server、PostgreSQL或MySQL上,则不应启用该设置。对于MySQL,还需注意驱动版本对TIMESTAMP_WITH_TIMEZONE的支持情况。

❓

Q&A

Hibernate的JAVA_TIME_USE_DIRECT_JDBC设置有什么作用?

该设置允许Hibernate直接使用Java 8的日期时间对象,从而提升性能。

如何在Spring中启用JAVA_TIME_USE_DIRECT_JDBC设置?

可以通过在Spring配置中设置属性spring.jpa.properties.hibernate.type.java_time_use_direct_jdbc=true来启用该设置。

不同数据库对Java 8日期时间对象的支持情况如何?

SQL Server、PostgreSQL和MySQL不支持将ZonedDateTime绑定到TIMESTAMP_WITH_TIMEZONE列。

启用JAVA_TIME_USE_DIRECT_JDBC设置前需要注意什么?

在启用该设置之前,需检查当前JDBC驱动程序是否支持绑定所有Java日期/时间对象。

Hibernate默认如何处理Java 8日期时间对象?

Hibernate默认使用PreparedStatement.setTimestamp方法绑定LocalDateTime、OffsetDateTime和ZonedDateTime对象。

使用JAVA_TIME_USE_DIRECT_JDBC设置后,Hibernate如何绑定日期时间对象?

启用该设置后,Hibernate可以使用PreparedStatement.setObject方法直接绑定Java 8日期时间对象。

🏷️

标签

➡️

继续阅读