有没有办法使用 HQL 获取数据库时区?相同的 HQL 是否适用于所有数据库?
问问题
556 次
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 回答