私はウェブサイトで 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 を使用したり、動的投影を有効にしたりできます。