2016-11-02 10 views
3

私はスプリングブートのアプリケーションで、スプリングデータJPA(ハイバーネイト4)を使用して自分のDBにアクセスしています。Spring Data JPAを使用したJpaRepositoryとCrudRepositoryの違いは何ですか?

疑問は、DAOインターフェイス(JPAが自動的にクエリを生成するために使用する)に関連しています。

1)AccomodationDAO

@Repository 
@Transactional(propagation = Propagation.MANDATORY) 
public interface AccomodationDAO extends JpaRepository<Accomodation, Long> { 

    Accomodation findById(@Param("id") Long id); 

} 

2)EventDAO

だから、私のプロジェクトで、私はこれらの2つのインターフェイス持って

public interface EventDAO extends CrudRepository<Event, Integer> { 

    public Event findByLocation(Point location); 

    public Event findById(@Param("id") Integer id); 

} 

彼らの両方が正常に動作をし、同じロジックを使用してクエリを宣言します。

私の唯一の疑いがある:第二つCrudRepositoryを実現しながら、最初のものは、JpaRepositoryを拡張します。

JpaRepositoryCrudRepositoryの違いは、正確には何ですか?使用するのに最適な選択肢とは何ですか?あるいは、他の選択肢を使用するよりも良い選択肢は何ですか?

もう一つの疑問は、次のとおりです。私の定義されたDAOインタフェースがJpaRepositoryCrudRepository自身のインターフェイスですを拡張し、なぜ?私が知っていることから、インターフェイスは実装されており、拡張されていません...何が欠けていますか?

+2

これを参照してください。http://stackoverflow.com/questions/14014086/what-is-difference-between-crudrepository-and-jparepository-interfaces-in-spring要するに、これは同じですが、「CrudRepository」 JPA固有の機能が必要な場合を除きます。 – kaqqao

答えて

7

JpaRepositoryはCrudRepositoryを拡張しています。これら二つのインタフェースのJavadocを比較する:短いJpaRepository

  • JpaRepository VS CrudRepository

    は、例えばQuery By Exampleのサポートの追加JPA特定の方法、バッチで、削除、手動フラッシング変化を有しますデータベースに

  • クエリメソッドは代わりにListを返します。 F Iterableさん

あなたがJpaRepositoryを使用する必要がありますJPAを使用している場合。

+1

特に最後の部分が間違っています。忘れずに、ストア固有のインターフェイスを使用してクライアントに永続テクノロジをリークさせないようにしてください。ストア固有のインターフェイスは、その中の調整された機能が本当に必要な場合にのみ使用してください。詳細については私の他の答えを見てください:http://stackoverflow.com/a/20784007/18122 –

+0

レッスンは学んだ - –

関連する問題