[解決済み] JPAとSpring Data JPAの違いは何ですか?
質問
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の仕様を参照し、独自に定義したプロバイダを用いて、アンダーグラウンドでサポートされるリポジトリを実装するための定義を提供します。
関連
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
[解決済み] Spring Data JPAにおけるCrudRepositoryとJpaRepositoryのインターフェースの違いは何ですか?
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Java Persistence APIにおけるFetchType LAZYとEAGERの違い?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
エラー java.util.NoSuchElementException
-
Spring Boot による HTTPS アクセスの設定
-
java Mail send email smtp is not authenticated by TLS encryption solution.
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
javaでよく使われる英単語
-
JSPで「リストが型解決できない!」の解決方法
-
ローカルリソースのロードが許可されていない場合の解決策
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決