web-dev-qa-db-ja.com

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

HibernateとSpring Data JPAの主な違いは何ですか? HibernateまたはSpring Data JPAを使用すべきでない場合また、Spring JDBCテンプレートは、いつHibernate/Spring Data JPAよりも優れたパフォーマンスを発揮しますか?

161
hard coder

HibernateはJPA実装であり、Spring Data JPAはJPAデータアクセス抽象化です。 Spring Dataは、GenericDaoカスタム実装のソリューションを提供します。また、メソッド名の規則を使用してJPAクエリを生成することもできます。

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

Spring JDBCははるかに軽量で、ネイティブクエリを対象としています。JDBCのみを使用する場合は、Spring JDBCを使用してJDBCの冗長性を処理することをお勧めします。

したがって、HibernateとSpring Dataは競合他社というよりも補完的なものです。

209
Vlad Mihalcea

ここで使用している3つの異なるものがあります。

  1. JPA:Javaオブジェクトからデータベースのリレーションへのデータの永続化、読み取り、管理の仕様を提供するJava永続化API。
  2. Hibernate:jpaを実装するさまざまなプロバイダーがあります。 Hibernateもその1つです。したがって、他のプロバイダーもあります。しかし、Springでjpaを使用する場合、将来別のプロバイダーに切り替えることができます。
  3. Spring Data JPA:これは、あなたの人生を楽にするために春が提供するjpaの上の別のレイヤーです。

だからspring data jpa and spring + hibernate works-


Spring Data JPA:

アプリケーションにspring + hibernateを使用しているとしましょう。ここで、hibernateのSessionFactoryを使用してcrud操作を作成するdaoインターフェイスと実装が必要です。 Employeeクラスのdaoクラスを作成しているとしましょう。明日、アプリケーションで他のエンティティに対して同様のcrud操作を作成する必要があるかもしれません。したがって、ここで見ることができる定型的なコードがたくさんあります。

Spring data jpaでは、リポジトリ(crudrepository、jparepository)を拡張してdaoインターフェースを定義できるため、実行時にdao実装を提供できます。もうdao実装を書く必要はありません。

102
Bhagwati Malav

SpringJPAがライブを簡単にすることに同意しません。はい、それはいくつかのクラスを提供し、いくつかの簡単なDAOを高速にすることができますが、実際にはそれがすべてです。 findById()以上のことを行うか保存する場合は、地獄を通過する必要があります。

  • org.springframework.data.repositoryクラスにEntityManagerアクセス​​なし(これは基本的なJPAクラスです!)
  • 独自のトランザクション管理(ハイバネートトランザクションは許可されません)
  • 複数のデータソース設定に関する大きな問題
  • データソースプーリングなし(HikariCPはサードパーティライブラリとして使用する必要があります)

なぜ独自のトランザクション管理が不利なのですか? Java 1.8では、デフォルトのメソッドをインターフェイス、Springアノテーションベースのトランザクションに許可するため、simpleは機能しません。

残念ながら、SpringJPAはリフレクションに基づいており、場合によってはメソッド名またはエンティティパッケージをアノテーション(!)にポイントする必要があります。それがリファクタリングが大きなクラッシュを引き起こす理由です。悲しいことに、@ TransactionalはプライマリDSのみで機能します:(複数のDataSourceがある場合は、覚えておいてください-トランザクションはプライマリでのみ機能します:)

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

HibernateはJPA互換、SpringJPA Spring互換です。 SpringJPAをSpring内で使用できる場合(たとえばSpringBoot)、HibernateJPA DAOはJavaEEまたはHibernate Standaloneで使用できます

HibernateまたはSpring Data JPAを使用すべきでない場合また、Spring JDBCテンプレートは、いつHibernate/Spring Data JPAよりも優れたパフォーマンスを発揮しますか?

多くの結合を使用する必要がある場合、または複数のデータソース接続を持つSpringを使用する必要がある場合にのみ、Spring JDBCを使用します。通常、JPAのJPAは避けてください。

しかし、私の一般的なアドバイスは、Daobab( http://www.daobab.io )という新しいソリューションを使用することです。 Daobabは私のJavaであり、JPAエンジンインテグレーターでもあり、あなたの仕事に大いに役立つと信じています:)

15

Hibernateは、データベースのJavaオブジェクトの仕様である「JPA」の実装です。

異なるORMSを切り替えることができるため、w.r.t JPAを使用することをお勧めします。

JDBCを使用する場合、SQLクエリを使用する必要があるため、SQLに習熟している場合はJDBCを使用してください。

1
Thoopalliamar

Spring Data/Spring JDBCを使用することをお勧めします。

JPAの学習曲線の量が多く、デバッグが難しい場合があります。一方、SQLを完全に制御できる一方で、クエリの最適化とパフォーマンスの向上がはるかに容易になります。 SQLは、DBAまたはデータベースをよりよく理解している人と簡単に共有できます。

0
Gaurang Popat