web-dev-qa-db-ja.com

Hibernateを介してJoda-TimeのDateTimeを保持する

PlayアプリでJodatimeを使用していますが、現在Java.util.DateJava.sql.Timeの間で相互に変換する必要があります。

JodatimeはPlayディストリビューションに含まれているので、これを行うにはもっと良い方法があると思います。モデルフィールドをJava.util.DateおよびJava.sql.Timeの代わりにDateTimesにする方法はありますか?変換は自動的に行われますか?これを合理化する別の方法はありますか?

42
Brad Mace

Hibernate 3の場合、次の注釈を日付フィールドに追加します。

@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")

Hibernateはこれであなたのために汚い仕事をします。

(クラスパスに joda-time-hibernate.jar があることを確認してください)

UPDATE:

Hibernate 4および5の場合、次の注釈を追加します。

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime")

(クラスパスに jadira-usertype-core.jar があることを確認してください)

53
Kees de Kooter
  1. Jodaは、Play 1.2.xにバンドルされているHibernateのバージョンであるHibernate 4.0でUserTypeライブラリを使用することを推奨しています(参照: http://joda-time.sourceforge.net/contrib/hibernate/index.html )。

  2. 依存関係を処理する適切な方法は、dependencies.ymlファイル。次のような行が含まれます。

    - org.jadira.usertype -> usertype.jodatime 2.0.1
    
10
Samuel

Jodaプロパティのそれぞれに@Type注釈を付ける代わりに、これをjpaプロパティに追加できます

#Hibernate config
jadira.usertype.autoRegisterUserTypes=true

そしてそれはうまく動作するはずです。

ps。jadira-usertype-core.jar はクラスパスにある必要があります。

7
naXa

Hibernate 4プロジェクトで2つのjarを有効にする必要があります。

  • compile( "joda-time:joda-time:2.8")
  • compile( "org.jadira.usertype:usertype.jodatime:2.0.1")
0
Zhe