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

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

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

entityManager.merge(someEntity);

もう一つの選択肢は、org.springframework.data.repository.CrudRepositoryのインスタンスを使うことです。一つは、CrudRepositoryのインスタンスを取得し、それを使ってエンティティを保存することができます。例えば、

aCrudRepository.save(someEntity);

エンティティをデータベースに保存するために EntityManager と CrudRepository を使用する場合の違いは何ですか? 2 つのアプローチ (エンティティ マネージャーと Crud リポジトリ) の利点と欠点は何ですか?

ベストアンサー1

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

  • ODBC ドライバ
  • Jdbcテンプレート
  • JPA (含むEntityManager)
  • Spring Data JPA (含むRepository)

各抽象化により、開発者は低レベルの詳細から保護されますが、独自の複雑さが生じる可能性があります。JdbcTemplate は、プレーンな JDBC に対する薄い抽象化です。はRepositoryに対する抽象化ですEntityManager。これにより、開発者は で導入されるいくつかの複雑な詳細から保護されEntityManager、定型コードと多くの便利なメソッドが追加されます。

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

おすすめ記事