web-dev-qa-db-ja.com

Spring Entity ManagerとSpring Data Repositoryの違いは何ですか?

WebサイトでJPAを使用しています。データを保存するためのオプションについて調べた後、私は2つのアプローチを見つけました。最初のアプローチは、javax.persistence.EntityManagerの実装を使用することです。 LocalContainerEntityManagerFactoryBeanを使用してEntityManagerのインスタンスをインスタンス化しました。 EntityManagerのインスタンスを取得したら、それを使用してエンティティを保存できます。例えば、

entityManager.merge(someEntity);

別のオプションは、org.springframework.data.repository.CrudRepositoryのインスタンスを使用することです。 1つは、CrudRepositoryのインスタンスを取得し、それを使用してエンティティを保存できることです。例えば、

aCrudRepository.save(someEntity);

EntityManagerとCrudRepositoryを使用してエンティティをデータベースに永続化することの違いは何ですか? 2つのアプローチの利点または欠点は何ですか(エンティティマネージャーとcrudリポジトリ)。

35
zfranciscus

この2つのインターフェースは、2つの異なるアプローチを提示します。

  • org.springframework.data.repository.CrudRepositoryは、CRUD操作を提供するリポジトリの一般的なインターフェースです。
  • javax.persistence.EntityManagerは永続化コンテキストに関連付けられています。 Springには、_ CrudRepository と呼ばれるJpaRepositoryを拡張する独自のインターフェースがあります。

永続的なAPIの利点と欠点について知っていただければ幸いです。そうでない場合、あなたは この質問 への回答を読むことができます。

22
bsiamionau

Java/Springで永続データを操作するには、いくつかのレイヤーがあります。

  • JDBC
  • JdbcTemplate
  • JPA(EntityManagerを含む)
  • Spring Data JPA(Repositoryを含む)

それぞれの抽象化は、開発者を恋人レベルの詳細から保護しますが、独自の複雑さをもたらす可能性があります。 JdbcTemplateは、プレーンなJDBCを薄く抽象化したものです。 RepositoryEntityManagerを抽象化したものです。 EntityManagerで導入される複雑な詳細から開発者を保護し、定型コードと多くの便利なメソッドを追加します。

たとえば、CrudRepositoryfindAll()の実装を追加します。これは非常に一般的であるため、事前定義するのが理にかなっています。リポジトリーには、エンティティー自体(例による照会)からメソッド名(構成上の規約)から照会を生成するための多くの便利なメソッドがあります。クエリDSLでニースタイプセーフFluent APIを使用したり、動的プロジェクションを有効にしたりできます。

10
Jan Bodnar