4

しばらくの間、アプリケーションのために Joda-Time に移動したいと考えていました。いくつかのハングアップがあります...

1-ここでの公式の Joda-Time 統合は、Hibernate 4.x アプリケーションでは古くなっているようです

2-ここで提案されている代替案には、ドキュメント/入門情報がないようです。

3-データベース (MySql 5.5.11) のどの型が Joda-Time の同等物に適切にマップされているかについての適切なリファレンスが見つかりません。

これらに対処する方法を知っている人はいますか?

4

1 に答える 1

5

あなたがリンクした 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 に設定されています

アプリケーションで国際日付を処理する必要がある場合は、同じことを行うか、アプリケーションが正しく動作することに満足するまで上記の設定を試すことをお勧めします。

于 2012-11-20T12:22:26.413 に答える