私は複数のエンティティからのデータを照会する「一般的な」リポジトリを作成したいです。私がそれをした場合:理解リポジトリ
@Repository
public interface MyRepository {
@Query("select r from Role r")
List<Role> getRoles();
}
MyRepositoryインスタンスが必要なときにSpringが実装する実装を見つけられないため、エラーが発生します。ここまでは順調ですね。今、私がこれを行う場合:
@Repository
public interface MyRepository extends JpaRepository {
@Query("select r from Role r")
List<Role> getRoles();
}
オブジェクトがJPA管理型(JpaRepositoryは一般的ではない)なので、私はエラーになります。さて、もう一度。私がこれをすると:
@Repository
public interface MyRepository extends JpaRepository<User, String> {
@Query("select r from Role r")
List<Role> getRoles();
}
それは動作します。どうして?私はロールではなくエンティティUserのJpaRepositoryを宣言しています。クエリーが別のクエリーに対抗する場合でもJpaRepositoryが具体的なエンティティを必要とするのはなぜですか?
まただけこの場合、 'User'で、で動作する' findAll'、 'findOne'等のような他の方法を定義するので。 '@ Query'を使ってメソッドを指定したので、メソッドのシグネチャを調べます。 –
は、私はちょうど@queryでクエリを実行したい場合でも、私はJpaRepositoryを拡張する必要がありますか? –
なぜこのようなクエリが必要なのでしょうか? 'RoleRepository extends JpaRepository'を作成し、 'findAll'メソッドを使用してください。しかし理論的には 'JpaRepository'ではなく' Repository'を拡張することができますが、なぜSpring Data JPAを使いたいのですか?あなたはすべての利点を失う。 –