15

私のエンティティには現在、Java Date プロパティが含まれています。Joda Time を日付の操作と計算にかなり頻繁に使用し始めています。これは、Dates を Joda DateTime オブジェクトに変換したり、元に戻したりする必要が常にあることを意味します。

Java Date オブジェクトの代わりに Joda DateTime オブジェクトを格納するようにエンティティを変更してはならない理由はありますか?

これらのエンティティは Hibernate を介して永続化されることに注意してください。jodatime-hibernateプロジェクトを見つけましたが、 Jodaメーリング リストで、新しいバージョンの hibernate と互換性がないことも読んでいました。しかもあまり手入れが行き届いていないようです。

したがって、Date と DateTime の間で変換を続けるのが最善なのか、それとも DateTime オブジェクトの永続化を開始するのが賢明なのか疑問に思っています。私の懸念は、保守が不十分なライブラリに依存していることです。

編集:私の目的の1つは、タイムゾーン情報をより適切に保存できるようにすることです。日付のみを保存すると、ローカル タイムゾーンで日付が保存されるように見えます。私のアプリケーションはグローバルに使用できるため、タイムゾーンも知っておく必要があります。Joda Time Hibernate は、ユーザー ガイドでもこの問題に対処しているようです。

4

4 に答える 4

5

Joda Time Hibernate は、最近の Hibernate リリースで使用できます。依存関係グラフを微調整する必要がある場合があります (除外の設定など)。また、Sourceforge にリリースした User Type もご覧になることをお勧めします。これにより、あなたが言及したクライアント オフセットの問題を回避することを目的とした Joda Time のユーザー タイプが提供されます。そのプロジェクトに関するフィードバックをお待ちしております。https://sourceforge.net/projects/usertype/files/

よろしくクリス。

于 2010-04-30T22:55:23.680 に答える
3

Bean プロパティ タイプとして Joda DateTime を使用することは、おそらく良い考えだと思います。その後、Hibernate で変換を行い、プロパティをネイティブ データベースの日付形式として保存できます。

私は個人的に jodatime-hibernate を使用しましたが、問題はありませんでした (Hibernate 3.2.5GA を使用しています)。

jodatime-hibernate について懸念がある場合は、いつでもHibernate のカスタム タイプ マッピング メカニズムを使用できます(これはすべて jodatime-hibernate が行うことだと確信しています)。

于 2010-02-03T02:50:37.183 に答える
3

要約すると、次のようになります。

java.util.Date

  • + Hibernate でのネイティブ サポート
  • – 悪い API

Joda-Time

  • + より良い API
  • – Hibernate でのネイティブ サポートの欠如

個人的には、サードパーティのライブラリ (この場合はどうやらHibernate のユーザー タイプ)を使用するだけでドメイン モデルと「サービス レイヤー」をきれいに保つことができれば、別の方法として、変換を「手動で」毎回実行するための追加のコードを記述することになります。必要なときは、サードパーティのライブラリを使用します。

于 2011-07-15T10:00:51.323 に答える
-3

日付は、たとえば文字列 ("2009-08-07 07:43:19 ...") のような高レベルの抽象化を使用して格納したり、Java オブジェクトとして格納したりしないでください。エポックからのミリ秒単位で永続化する必要があります。Joda 時間と通常の Java 日付時間の両方で、エポックからの時間をミリ秒単位で取得できます。経過したミリ秒数を保存し、DB から読み戻すときにオブジェクトに変換します。

long の代わりに重い Date オブジェクトを永続化することは、浮動小数点数を使用して金額を表すことに少し似ています。通常、これは巨大なコードの匂いです。

于 2010-02-03T02:09:40.947 に答える