これらの2つのアノテーションAPIについて混乱しています。私はグーグルで検索し、JPAがインターフェースであり、Hibernateアノテーションが実装であることを理解しています。そうですか?
しかし、プロジェクトでどちらを使用する必要がありますか?どちらが優れているのか、そしてその理由は?
1行を変更するだけでいつでも簡単に実装(つまりJPAベンダー)を変更できるので、JPAを選びます。HibernateやOpenJPAのような他のベンダー、ToplinkはJPA標準への実装を提供します。
アノテーションについては、JPAとHibernateの両方がアノテーションのサポートを提供しますjavax.persistence
。
JPAとHibernate
a)JPAは、コードで使用する永続性APIです。
b)JPA Apiは、実際の作業を行うために、実際の永続性プロバイダー(例:Hibernate / TopLink)に呼び出しを渡します。
c)パフォーマンスの観点から見た場合、それは実際の永続性プロバイダー(Hibernate / TopLink)に依存し、単なるラッパーレイヤーとしてのJPAには依存しません。
d)コードの依存関係の観点から見ている場合、コードは標準のJava Apiに依存しているため、JPAの方が理にかなっています。
e)Hibernateを使用したことがある場合、基準クエリなどの特定の機能がJPAに欠落していることがわかります。これは、アプリケーションで基準クエリを記述できないことを意味するのではなく、JPAエンティティマネージャーからSessionオブジェクトを取得する必要があります。これで、休止状態のプロジェクトと同じくらい上手になります。
しかし、現在、コードは特定のimpl(Hibernate)に依存しています。今後、JPA(2.0)でさらに多くのものが追加されるのを見ることができます。
f)JPAを使用する必要がある場合:私の考えでは、APIはクリーンであり、必要なものはすべてありませんが、良い一歩です。
基本的に、Hibernate は JPA 仕様を実装し、仕様以上の機能を追加します。そのため、Hiberate 固有の注釈はこれらの追加機能です。したがって、Hibernate 固有の機能の使用を強制するマッピングに遭遇するまで JPA アノテーションを使用し、それらのアノテーションを使用してそれらの機能を取得する必要があります。