HQL获取数据库时区

时间:2013-04-29 06:33:42

标签: hibernate hql

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

1 个答案:

答案 0 :(得分:1)

时区转换由底层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");

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