私の知る限り、Hibernate には 2 種類の実装があります。
- JPAの実装 (2)(@Entity、@Tableアノテーション)
- 古い(従来の)休止状態への拡張(JPAなし)、HSQLクエリが使用され、注釈はありません
それが本当なら、JPA は ORM 仕様であるのに、なぜ 2 番目のタイプの実装が必要なのですか? 比較しながらAPIのバージョンを教えていただけると、ORMの評価履歴全体が把握できるのではないでしょうか?ありがとう。
Hibernateは、JPA仕様の前の最初のORMツールの1つでした。また、Java 5より前(Javaでアノテーションが利用可能になったとき)の開発者であったため、すべてがXML構成ベースまたはXDocletのいずれかでした。
SpringとHibernateから多額の借用をしたJavaEEの大幅な改良があり、JPAが導入されましたが、独自の実装をプラグインできるほど「汎用的」でした。
Hibernateの動作に実際の違いはなく、構成に使用するメカニズムだけです。JPAアノテーションが標準になりましたが、必要な場合にのみXMLを使用できます。
Hibernate の2 つの異なる実装などというものはありません。公式の実装は 1 つだけです。アノテーション/JPA機能を介してHibernateを使用するか、明示的なHibernateクラスを介してHibernateを使用できます。ただし、基礎となる Hibernate ライブラリは同じです。
JPA は、Hibernate (および他の同様のライブラリ) が実装する単なるインターフェースです。
歴史は、90 年代後半に誰かが EJB を発明したことを示しています。Java コミュニティの共通のコンセンサスは、誰もそれを好きではなく、多くの人が Hibernate または同様のフレームワークを使用しただけだということです。これは、EJB の永続性が Hibernate の動作方法にほぼ基づいてモデル化された EJB 3.0 まででした (EJB にはデータ マッピングだけでなく、他のタイプの Bean があることに注意してください)。
私が覚えている限りでは、Hibernate の注釈はバージョン 3.2 かそこらから導入されました。JPAアノテーション(javax.persistenceパッケージ)について話しているのではなく、hibernate-annotationsパッケージにあるhibernate固有のアノテーションです。
Hibernate 固有のアノテーションで実行できるほとんどすべてのことは、最近では JPA2 でも実行できます。
前述のとおり、JPA は単なるインターフェースであり、そのインターフェースにコーディングすると、(少なくとも理論的には) 基礎となる ORM プロバイダーを別のもの (TopLink、OpenJPA、または Eclipselink など) に置き換える方が簡単になります (する必要があります)