52

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

entityManager.merge(someEntity);

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

aCrudRepository.save(someEntity);

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

4

2 に答える 2

38

Java/Springでの永続データの操作にはいくつかの層があります。

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

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

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

于 2019-05-29T16:33:18.187 に答える
31

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

  • org.springframework.data.repository.CrudRepositoryCRUD操作を提供するリポジトリの一般的なインターフェイスです。
  • javax.persistence.EntityManager永続コンテキストに関連付けられています。Springには、この目的のためにCrudRepository 呼び出される拡張機能を備えた独自のインターフェースがあります。JpaRepository

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

于 2013-01-31T08:58:13.043 に答える