1. ホーム
  2. java

[解決済み] JPAとSpring Data JPAの違いは何ですか?

2022-04-24 17:39:24

質問

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

つまり、JPAはインターフェースを提供し、他のORM技術はそのインターフェースを実装するJPAプロバイダ(例:Hibernate)と呼ばれるものです。

さて、Spring Data JPAとはいったい何なのでしょうか?

Spring Data JPAはJPAにいくつかの機能(Interfaces)を追加したもので、まだ仕様だけなのか、それともJPAプロバイダでもあるのか?

私はSpring Data JPAがリポジトリ(DAO層:私が間違っていない場合)を中心に動作するのを見ました。だから、私はそれが 'Spring Data JPA + Hibernate'を使用するか、'Hibernate'ディレクションのみを使用するか、どう違うのかを意味します。

解決方法は?

<ブロッククオート

私はSpring、JPAがリポジトリ(DAO層:私が間違っていない場合)周りに動作するのを見ました。だから私はそれが 'Spring JPA + Hibernate'を使用するか、'Hibernate'を直接使用するだけで、どのように違うのかを意味します?

おっしゃるとおりです。 JPA 仕様 一方 ハイバーネート はその仕様の特定の実装です(これらの実装は通常 プロバイダー ). Hibernateを使用すると、そのプロバイダに自分自身を縛り付けることになり、必要なときに別のオプションに切り替える自由が制限されます(たとえば、Hibernateにバグがあって開発プロセスが停止したため、代わりにEclipseLinkまたはObjectDBを使用する場合など)。

引用元 Spring Data JPA 's のドキュメントを参照してください。

アプリケーションのデータアクセス層の実装は、かなり長い間、面倒なものでした。あまりに多くの定型的なコードを書かなければならなかったのです。ドメインクラスは貧弱で、本当の意味でのオブジェクト指向やドメイン駆動型で設計されていない。

この2つの技術を使うことで、リッチドメインモデルの永続化に関して、開発者の生活はずっと楽になります。しかしながら、特にリポジトリを実装するための定型的なコードの量は、依然として非常に多くなっています。Spring Dataのリポジトリ抽象化の目的は、様々な永続化ストアのためのデータアクセスレイヤーを実装する労力を大幅に削減することです。

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

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

したがって、コンテナの中で使うことも、コンテナの外で使うこともできる。

<ブロッククオート

さて、Spring, JPAとは一体何なのでしょうか。Spring, JPAはJPAにいくつかの機能(Interfaces)を追加したものですが、それでも仕様だけなのか、それともJPAプロバイダでもあるのでしょうか?

Spring Data JPAでは、JPAの仕様を参照し、独自に定義したプロバイダを用いて、アンダーグラウンドでサポートされるリポジトリを実装するための定義を提供します。