Próbuję zaimplementować niestandardowe repozytorium Spring. Mam interfejs:Nie znaleziono właściwości dla niestandardowego repozytorium danych wiosna
public interface FilterRepositoryCustom {
List<User> filterBy(String role);
}
realizacja:
public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}
a "głównym" repozytorium, wyciągając moje niestandardowe repozytorium
public interface UserRepository extends JpaRepository<User, String>, FilterRepositoryCustom {
...
}
Używam Wiosna Boot, a według do docs:
By default, Spring Boot will enable JPA repository support and look in the package (and its subpackages) where @SpringBootApplication is located.
Kiedy uruchomić mojej aplikacji, otrzymuję ten błąd:
org.springframework.data.mapping.PropertyReferenceException: No property filterBy found for type User!
Chociaż zgadzam się, że to działa (i nie widziałem go w akcji), mam ciężko pogodzić ten problem z połączonego dokumentacji, która wyraźnie używa ' CustomizedUserRepositoryImpl' na repozytorium o nazwie 'UserRepository'. Dokumenty idą dalej (przykład 29), aby używać 'HumanRepositoryImpl' i' ContactRepositoryImpl' razem na 'UserRepository'. Wydają się wskazywać, że ważne jest, aby nazwa implementacji fragmentu pasowała do nazwy interfejsu fragmentu, a nie do nazwy repozytorium podstawowego, ale w oczywisty sposób nie wynika to z tego, co widziałem. Jestem zdezorientowany ... –
Zrobiłem jeszcze więcej kopania i odpowiedziałem na moje własne pytanie: wymóg, by nazwa implementacji była oparta na bazie repozytorium, dotyczy tylko starszych (1.x) wersji danych sprężynowych. W wersji 2.x danych sprężynowych to wymaganie się zmienia. W wersji 2.x nazwa pliku musi mieć niestandardową nazwę interfejsu. –
Uratowałeś mi czas i uszczęśliwiłeś mnie! Dzięki, nazywanie za pomocą Spring Data naprawdę maters, event dla testów. –