0

有没有办法使用 HQL 获取数据库时区?相同的 HQL 是否适用于所有数据库?

4

1 回答 1

2

时区转换由底层 JDBC 驱动程序(而不是 Hibernate)完成。通过这种方式,服务器时区对应用程序隐藏。据我所知,没有“官方”方式来读取服务器时区。

在 Oracle 数据库上,您可以使用以下命令读取服务器时区

SELECT DBTIMEZONE FROM dual;

对于 MySQL,你可以

SELECT @@global.time_zone, @@session.time_zone;

但正如您所见,这不适用于所有数据库。

您可以在 JDBC 连接字符串(在您的 hibernate.cfg.xml 中)中配置数据库时区,但这更加依赖于数据库。

另一种解决方案是定义一个系统属性,它必须在启动应用程序时指定,-Dserver-timezone=...并且在您的应用程序中您可以通过

String tz = System.getProperty("server-timezone");

通过这种方式,它适用于所有数据库,但您必须在启动脚本中指定它。

于 2013-04-29T09:22:20.940 回答