私はJava、mysql、hibernate(3.6.x)を使用しています。 Java側では、Java.sql.Timestampオブジェクトを使用しています。mysql側では、datetime列を使用しています。
システム/ Java/mysqlのタイムゾーンに関係なく、UTCタイムゾーンを使用してこれらのタイムスタンプオブジェクトをhibernateに保存/ロードさせたい。
「 JPAとHibernateを使用してUTCタイムゾーンで日付/時刻とタイムスタンプを保存する方法 」を見つけました。これは有益でしたが、見つけるのに苦労している最終的な実装情報が不足しています。
そのスレッドに示されているようにUtcTimestampTypeDescriptorを実装し、通常のTimestampTypeDescriptorの代わりにこれを使用するようにhibernateを構成したいと思います。
デフォルトのタイムスタンプタイプの代わりにUtcTimestampタイプを使用するようにHibernateを構成するにはどうすればよいですか?
MySQLの場合のみ、カスタムHibernateタイプを実装する代わりに、JDBC接続URLに次のJDBCオプションを追加することもできます。
useTimezone=true
serverTimezone=UTC
これにより、JDBC接続がUTCタイムゾーンに強制され、MySQLにJVMタイムゾーンからの変換を実行するように要求されます。正味の効果は、JVMでローカルタイムゾーンを維持できることです(たとえば、ログメッセージの印刷など)が、DATETIME列はUTCとして保持されます。
例えば:
<bean id="hibernateAnalysisSessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="hibernateProperties">
<props>
<!-- Connection parameters -->
<prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
<prop key="hibernate.connection.url">jdbc:mysql://hostname/databaseName?useTimezone=true&serverTimezone=UTC</prop>
...
クラスを取得するpublic class UtcTimestampType extends TimestampType
from あなたのリンク
そしてこのコードを作成します
@org.hibernate.annotations.Type(type = "yourPackage.UtcTimestampType")
public Java.util.Date date;
注釈を使用する
または
<property name="date" column="yourColumn" type="yourPackage.UtcTimestampType" />
* .hbm.xmlを使用する