web-dev-qa-db-ja.com

Java.time.Instant(JDK8)をJPA2 / Hibernateで永続化する

現在、JPAもHibernateも、JDK8でJSR-310によってもたらされる新しい日付/時刻クラスをサポートしていません(JPA ticket 、Hibernate ticket )。それでも、最終的にうまく設計されているので、JDK8の日付/時刻クラスを使用してコーディングしたいと思います。特に、すべてのエンティティがこの特定のクラスを使用するため、すべてのJava.time.Instantタイプを完全にサポートするのではなく、Java.time.*に関心があります(または、少なくとも:-)

1つのオプションは、JPA 2.1で定義されているように、 型コンバーター を記述することです。ただし、アプリサーバーはJBoss EAP6.3でありJPA2.0と互換性はありませんが、2.1とは互換性がないため、現時点では問題外です。

次のオプションは、Hibernateユーザータイプを使用することです(他のJSR-310クラスの変換に関するブログ投稿 ここ )。

より良いオプションはありますか?ありがとう。

18

Hibernate 5.2以降では、この問題はより完全に解決されました。Ipandzicのコメントからhibernate-Java8依存関係を含める必要がなくなり、追加の手順なしでLocalDateTimeInstantなどのJava.time.*クラスを使用できます。また、以前のJava.util.LocalDateTimeアプローチで行っていたように、Java.util.Dateなどを使用して列をTemporalとしてマークする必要もなくなりました。

Hibernate 5.2以降、hibernate-Java8コンテンツはhibernate-coreにマージされました ここの変更ノートを参照

10
PryceJS

Hibernate 5.2.0+を使用するか、以前のHibernate5の場合は次の依存関係を追加します。

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-Java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
20
lpandzic

ThreeTenホームページ を参照してください。ここでは、3つの異なるJPAライブラリが言及されています。

6
JodaStephen