web-dev-qa-db-fra.com

Aucune propriété trouvée pour le type ... référentiel Spring Data personnalisé

J'essaie d'implémenter un référentiel Spring personnalisé. J'ai l'interface:

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

la mise en oeuvre:

public class FilterRepositoryImpl implements FilterRepositoryCustom {
...
}

et le référentiel "principal", qui étend mon référentiel personnalisé:

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

J'utilise Spring Boot et, selon la docs :

Par défaut, Spring Boot activera la prise en charge du référentiel JPA et recherchera le package (et ses sous-packages) où @SpringBootApplication est situé.

Lorsque j'exécute mon application, j'obtiens cette erreur:

org.springframework.data.mapping.PropertyReferenceException: Aucune propriété filterBy trouvée pour le type User!

29
Héctor

Le problème ici est que vous créez FilterRepositoryImpl mais que vous l'utilisez dans UserRepository. Vous devez créer UserRepositoryImpl pour que cela fonctionne.

Lisez cette doc pour plus de détail

Fondamentalement

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

public class UserRepositoryImpl implements UserRepositoryCustom {
...
}

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

J'ai eu le même problème dans un de mes projets. J'ai résolu le problème en ajoutant une ligne dans mon 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>
0
Bruno 82