HQL を使用してデータベースのタイムゾーンを取得する方法はありますか? すべてのデータベースで同じ HQL を使用できますか?
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 に答える