Подтвердить что ты не робот

Не найдено свойства для типа... custom Spring Репозиторий данных

Я пытаюсь реализовать пользовательский репозиторий 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!

4b9b3361

Ответ 1

Проблема в том, что вы создаете FilterRepositoryImpl, но используете его в UserRepository. Вам нужно создать UserRepositoryImpl, чтобы это работало.

Прочитайте этот документ для получения более подробной информации

В основном

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

public class UserRepositoryImpl implements UserRepositoryCustom {
...
}

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

Смотрите: Мэтт Форсайт комментарий

Ответ 2

Обязательно, что customMethod() в CustomRepository может иметь только те параметры, которые определены как

1. Имя класса объекта - customMethod(User user),

2. Атрибуты класса Entity - customMethod(String firstName), здесь firstName является атрибутом класса User Entity.

Могу ли я не иметь что-то вроде customMethod (критерии CustomCriteria), класс критериев содержит различные атрибуты, которые используются для построения динамического запроса.

например getStatusByCriteria(CustomCriteria criteria), CustomCriteria - это простое pojo, аннотированное @Component, чтобы Spring его идентифицировал.

Когда я попробовал это, я получаю сообщение об ошибке:

org.springframework.data.mapping.PropertyReferenceException: нет Найдены критерии свойства для типа UserRepository!

Ответ 3

Еще одна причина, по которой эта ошибка может возникнуть, если класс impl для FilterRepositoryCustom не выбран в вашей весенней конфигурации:

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

Ответ 4

Это ошибка JPA, так как ваша сущность не имеет свойства filterBy. Ваш метод нужно будет называть чем-то вроде findByRole (роль строки), где "роль" является свойством.

См. https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

Ответ 5

У меня была такая же проблема в моем проекте. Я решил проблему, добавив строку в моем pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <includes>
            <include>com/my/package/entities/*.java</include>
            <include>com/my/package/repositories/*.java</include>
            <include>com/my/package/repositories/impl/*.java</include> <!-- add this -->
        </includes>
    </configuration>
</plugin>

Ответ 6

Старый способ:

Entity aThing = repository.findOne(1L); Новый способ:

Необязательный aThing = repository.findById(1L);