web-dev-qa-db-ja.com

タイプのプロパティが見つかりません...カスタムSpring Dataリポジトリ

カスタムSpringリポジトリを実装しようとしています。私はインターフェイスを持っています:

public interface FilterRepositoryCustom {
    List<User> filterBy(String role);
}

実装:

public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}

カスタムリポジトリを拡張する「メイン」リポジトリ:

public interface UserRepository extends JpaRepository<User, String>, FilterRepositoryCustom {
...
}

私はSpring Bootを使用していますが、 docs

デフォルトでは、Spring BootはJPAリポジトリサポートを有効にし、@ SpringBootApplicationが配置されているパッケージ(およびそのサブパッケージ)を調べます。

アプリケーションを実行すると、次のエラーが表示されます。

org.springframework.data.mapping.PropertyReferenceException:タイプUserのプロパティfilterByが見つかりません!

41
Héctor

ここでの問題は、FilterRepositoryImplを作成しているが、UserRepository。これを機能させるには、UserRepositoryImplを作成する必要があります。

詳細についてはこのドキュメントを読んでください

基本的に

public interface UserRepositoryCustom {
    List<User> filterBy(String role);
}

public class UserRepositoryImpl implements UserRepositoryCustom {
...
}

public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
...
}

参照:matt forsytheコメント

59
Aman Tuladhar

FilterRepositoryCustomの実装クラスがスプリング設定で選択されない場合、このエラーが発生する別の方法:

@EnableJpaRepositories(basePackageClasses = {RepoPackageMarker.class, FilterRepositoryCustomImpl.class})
1
user64141

CustomRepositoryのcustomMethod()には、次のいずれかのパラメーターのみを定義する必要がありますか?

1.エンティティクラス名-customMethod(User user)

2.エンティティクラスの属性-customMethod(String firstName)、ここでのfirstNameは、ユーザーエンティティクラスの属性です。

CustomMethod(CustomCriteria criteria)のようなものはありません。条件クラスには、動的クエリの構築に使用されるさまざまな属性が含まれています。

例えばgetStatusByCriteria(CustomCriteria criteria), CustomCriteriaは、Springが識別するために@Componentアノテーションが付けられた単純なpojoです。

これを試みたときにエラーが発生します:

org.springframework.data.mapping.PropertyReferenceException:タイプUserRepositoryのプロパティ条件が見つかりません!

0
Vivek Vhatkar