web-dev-qa-db-ja.com

Spring Data-JPA対JPA:違いは何ですか?

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

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

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

134
DHRUV BANSAL

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

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

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

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

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

まとめると、JPAの上に別の抽象化層を追加します。これは、SpringコンテキストでPersistence Layerをサポートする標準ベースの設計を定義するようなものです。これらの定義済みインターフェース(Springに知られている)は、フレームワークがJPAを使用して結果を提供するサービスを提供します。 Springがプロジェクトをスキャンして見つけることができる方法でリポジトリを定義します。

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

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

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

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

119
Fritz

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

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

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

  • Java永続クエリ言語(JPQL)。

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

    enter image description here

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

機能:

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

    enter image description here
33
Shreyos Adikari