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 に答える