現在、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クラスの変換に関するブログ投稿 ここ )。
より良いオプションはありますか?ありがとう。
Hibernate 5.2以降では、この問題はより完全に解決されました。Ipandzicのコメントからhibernate-Java8
依存関係を含める必要がなくなり、追加の手順なしでLocalDateTime
やInstant
などのJava.time.*
クラスを使用できます。また、以前のJava.util.LocalDateTime
アプローチで行っていたように、Java.util.Date
などを使用して列をTemporal
としてマークする必要もなくなりました。
Hibernate 5.2以降、hibernate-Java8
コンテンツはhibernate-core
にマージされました ここの変更ノートを参照
Hibernate 5.2.0+を使用するか、以前のHibernate5の場合は次の依存関係を追加します。
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-Java8</artifactId>
<version>${hibernate.version}</version>
</dependency>
ThreeTenホームページ を参照してください。ここでは、3つの異なるJPAライブラリが言及されています。