有没有办法使用HQL获取数据库时区?相同的HQL是否适用于所有数据库?
答案 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");
这样它适用于所有数据库,但您必须在启动脚本中指定它。