あなたがリンクした Jadira UserType ライブラリを使用して、いくつかの成功を収めました。hibernate マッピング構成では、クラスを「タイプ」としてDateTime
指定することにより、Joda プロパティを MySQL DATETIME または TIMESTAMP 列にマップできます。org.jadira.usertype.dateandtime.joda.PersistentDateTime
例えば:
<class name="DateTestEntity" table="DATE_TEST">
<id name="id" column="ID">
<generator class="native" />
</id>
...
<property name="dateOfBirth" type="org.jadira.usertype.dateandtime.joda.PersistentDateTime" column="DATE_OF_BIRTH" />
</class>
他の MySQL と Joda-Time 型の間のマッピングについてはよくわかりませんが、これらの Javadocには、マッピング構成で使用できるクラスがリストされています。
開始するために必要な作業はこれだけです。ただし、タイムゾーンに関して考慮すべき点がいくつかあります。
リンクしたJavadocにリストされているマッピングクラスの多くには、「ローカル」に相当するものがあります。例えば。PersistentLocalDateTime
_
PersistentDateTime
タイムゾーンを考慮するときに UserType が使用する 2 つのプロパティがあります: jadira.usertype.databaseZone
& jadira.usertype.javaZone
。(この質問またはこの質問を見て、どこに設定できるかを確認してください。)それらの違いはわかりませんが、この質問が示すように、databaseZoneが最も重要なようです。
私が取り組んでいるプロジェクトでは、すべての日付を UTC (つまり GMT) で保存し、ユーザーに表示するときに特定のタイムゾーンにのみ変更したいと考えています。これまでのところ、次のセットアップで問題は発生していません。
- MySQL サーバー (および開発マシン上のすべての MySQL インスタンス) は、UTC タイム ゾーンを使用するように構成されています。
- Hibernate構成ファイルでは
PersistentDateTime
なく、使用していますPersistentLocalDateTime
jadira.usertype.databaseZone
&jadira.usertype.javaZone
は両方とも UTC に設定されています
アプリケーションで国際日付を処理する必要がある場合は、同じことを行うか、アプリケーションが正しく動作することに満足するまで上記の設定を試すことをお勧めします。