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リポジトリ)。
この2つのインターフェースは、2つの異なるアプローチを提示します。
org.springframework.data.repository.CrudRepository
は、CRUD操作を提供するリポジトリの一般的なインターフェースです。javax.persistence.EntityManager
は永続化コンテキストに関連付けられています。 Springには、_ CrudRepository
と呼ばれるJpaRepository
を拡張する独自のインターフェースがあります。永続的なAPIの利点と欠点について知っていただければ幸いです。そうでない場合、あなたは この質問 への回答を読むことができます。
Java/Springで永続データを操作するには、いくつかのレイヤーがあります。
EntityManager
を含む)Repository
を含む)それぞれの抽象化は、開発者を恋人レベルの詳細から保護しますが、独自の複雑さをもたらす可能性があります。 JdbcTemplateは、プレーンなJDBCを薄く抽象化したものです。 Repository
はEntityManager
を抽象化したものです。 EntityManager
で導入される複雑な詳細から開発者を保護し、定型コードと多くの便利なメソッドを追加します。
たとえば、CrudRepository
はfindAll()
の実装を追加します。これは非常に一般的であるため、事前定義するのが理にかなっています。リポジトリーには、エンティティー自体(例による照会)からメソッド名(構成上の規約)から照会を生成するための多くの便利なメソッドがあります。クエリDSLでニースタイプセーフFluent APIを使用したり、動的プロジェクションを有効にしたりできます。