カスタム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が見つかりません!
ここでの問題は、FilterRepositoryImpl
を作成しているが、UserRepository
。これを機能させるには、UserRepositoryImpl
を作成する必要があります。
基本的に
public interface UserRepositoryCustom {
List<User> filterBy(String role);
}
public class UserRepositoryImpl implements UserRepositoryCustom {
...
}
public interface UserRepository extends JpaRepository<User, String>, UserRepositoryCustom {
...
}
FilterRepositoryCustomの実装クラスがスプリング設定で選択されない場合、このエラーが発生する別の方法:
@EnableJpaRepositories(basePackageClasses = {RepoPackageMarker.class, FilterRepositoryCustomImpl.class})
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のプロパティ条件が見つかりません!