JPAとSpring Data JPAの違いは何ですか?


144

Spring Data-JPAとJPAの違いについて少し混乱しています。JPAについては、人気のORMテクノロジーを使用してJavaオブジェクトをリレーショナルデータベースに永続化するための仕様であることを知っています。

言い換えれば、JPAはインターフェースやその他のORMテクノロジーを提供し、JPAプロバイダー(Hibernateなど)として知られるインターフェースを実装します。

さて、Spring Data JPAとは正確には何ですか?

Spring Data JPAはJPAを介していくつかの機能(インターフェース)を追加しましたが、それでも指定されているだけですか、それともJPAプロバイダーでもありますか?

Spring Data JPAがリポジトリー(DAOレイヤー:私が間違っていない場合)を回避するのを見ました。つまり、「Spring Data JPA + Hibernate」を使用する場合と「Hibernate」指示のみを使用する場合とではどのように違うのでしょうか。

回答:


126

私は春を見た、JPAはリポジトリ(DAOレイヤー:私が間違っていない場合)を回避します。それでは、「Spring JPA + Hibernate」を使用する場合と「Hibernate」を直接使用する場合の違いは何ですか?

あなたが言ったように、JPAは、ある仕様ながら、Hibernateはその仕様の特定の実装である(これらの実装は、通常と呼ばれるプロバイダー)。Hibernateを使用することで、必要に応じて別のオプションに切り替える自由を制限するプロバイダーに縛られます(たとえば、Hibernateには開発プロセスを停止させるバグがあるため、代わりにEclipseLinkまたはObjectDBを使用したい)。

Spring Data JPAドキュメントを引用:

アプリケーションのデータアクセスレイヤーの実装は、かなり長い間面倒でした。多すぎる定型コードを作成する必要がありました。ドメインクラスは貧弱で、実際のオブジェクト指向またはドメイン駆動の方法で設計されていません。

これらの両方のテクノロジーを使用すると、リッチドメインモデルの永続性に関して開発者の作業がはるかに楽になります。それにもかかわらず、リポジトリを実装するための定型コードの量は、特にまだ非常に多くなっています。したがって、Spring Dataのリポジトリ抽象化の目的は、さまざまな永続ストアのデータアクセス層を実装する労力を大幅に削減することです。

要約すると、これはJPAの上に、抽象化の別のレイヤーを追加するものであり、Springコンテキストで永続性レイヤーをサポートするための標準ベースの設計を定義するようなものです。これらの定義されたインターフェース(Springで知られています)は、JPAを使用して結果を提供するためにフレームワークが処理するサービスを提供します。Springがプロジェクトをスキャンして見つけられるようにリポジトリを定義します。

<repositories base-package="com.acme.repositories" />

したがって、コンテナのコンテキスト内またはコンテナの外で使用できるようにします。

では、Springとは具体的にはJPAです。Springであるか、JPAはJPAにいくつかの機能(インターフェース)を追加しましたが、それでも指定されているだけですか、それともJPAプロバイダーでもありますか?

Spring Data JPAは、定義したプロバイダーを使用してJPA仕様を参照することにより、内部でサポートされるリポジトリーを実装するための定義を提供します。


1
Springが管理するエンティティのコレクションをリポジトリと呼ぶことはできますか?理由はわかりませんが、リポジトリを使用したSpring JPAサポートは、EJBのEntityManagerと非常に似ているようです。つまり、正しい考え方ですか、それとも目的が完全に異なるのですか?前もって感謝します。ムスタファ。
Mustafa 2014年

1
@Mustafaほとんどのソリューションには共通の根拠があります。目標は同じかもしれませんが、関連するインターフェースのために実装は異なります。
Fritz

35

Java Persistence API(JPAとも呼ばれる)は、Java Platform、Standard Edition(JavaSE)およびJava Platform、Enterprise Edition(JavaEE)を使用してアプリケーションのリレーショナルデータを管理するJavaフレームワークです。

このコンテキストでの持続性は、3つの領域をカバーしています。

  • javax.persistenceパッケージで定義されているAPI自体。

  • Java Persistence Query Language(JPQL)。

  • オブジェクトリレーショナルメタデータ。

    ここに画像の説明を入力してください

Spring Data JPAは、JPAベースのリポジトリーの実装を容易にする包括的なSpring Dataプロジェクトの一部です。

特徴:

  • SpringとJPAに基づいてリポジトリを構築するための洗練されたサポート
  • QueryDSL述語、したがってタイプセーフなJPAクエリのサポート
  • ドメインクラスの透過的な監査
  • ページネーションのサポート、動的クエリの実行、カスタムデータアクセスコードを統合する機能
  • @Queryブートストラップ時の注釈付きクエリの検証
  • XMLベースのエンティティマッピングのサポート
  • 導入によるJavaConfigベースのリポジトリ設定 @EnableJpaRepositories

    ここに画像の説明を入力してください

3

JPA

JPAは、Javaオブジェクトをリレーショナルデータベースシステムにマッピングする方法を標準化する仕様です。ただ仕様なので、JPAはインターフェースなどのセットで構成されEntityManagerFactoryEntityManagerデータベース・テーブルにJavaのエンティティ・オブジェクトをマップヘルプ、および注釈。

HIbernate、EclipseLink、Open JPAなど、使用できるJPAプロバイダーがいくつかあります。

Spring Data JPA

Spring Data JPAは、JPAデータアクセス抽象化です。JPAと同様に、Spring Data JPAはJPAプロバイダーなしでは機能しません。

Spring Data JPAは、DDD Repositoryパターンまたは へのソリューションを提供しますDAO (Data Acess Object) pattern。また、メソッド名の規則を使用してJPAクエリを生成することもできます。

Spring Data JPAは、Hibernate、Eclipse Link、またはその他のJPAプロバイダーと連携できます。SpringまたはJava EEを使用することの非常に興味深い利点は@Transactionalアノテーションを使用して宣言的にトランザクション境界を制御できることです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.