Comment puis-je appliquer la spécification de recherche sur les méthodes de référentiel?
voici mon code
@Repository public interface JourneyRepository extends JpaRepository<Journey, Long>, JpaSpecificationExecutor<Journey> { Page<Journey> findAllByDriverId(Long id, Pageable pageable); }
Je souhaite appliquer la spécification de critères de recherche sur findAllByDriverId
p>
3 Réponses :
Le modèle findByType est fourni par spring data jpa . JpaSpecificationExecutor prend uniquement en charge les inferface suivante. Si vous voulez findAllByDriverId, utilisez simplement Spring Data jpa.
public interface JourneyRepository extends JpaRepository<Journey, Long> { Page<Journey> findAllByDriverId(Long id, Pageable pageable); }
Je pense que vous n'avez pas besoin de JpaSpecificationExecutor, et je suppose que DriverId est dans Journey? Ensuite, incluez spring-boot-starter-data-jpa
public interface JpaSpecificationExecutor<T> { T findOne(Specification<T> spec); List<T> findAll(Specification<T> spec); Page<T> findAll(Specification<T> spec, Pageable pageable); List<T> findAll(Specification<T> spec, Sort sort); long count(Specification<T> spec); }
pouvez-vous s'il vous plaît être précis dans mon cas sur findByType (je veux dire les données de printemps jpa). ce que j'ai besoin d'utiliser pour cela dans mon code
Oui, vous pouvez en utilisant l'annotation @Query au-dessus de la méthode dans le référentiel par exemple:
@Query(value="select * from Journey where [name of the field] = ?1", countQuery = "SELECT count(*) FROM Journey WHERE [name of the field] = ?1", nativeQuery = true) Page<Journey> findAllByDriverId(Long id, Pageable pageable);
J'ai besoin de rechercher dans tous les champs de la table Journey. et c'est environ 20 champs dans ce
Qu'entendez-vous par recherche dans tous les champs?
signifie que si l'utilisateur entre quelque chose, il effectuera une recherche dans toutes les colonnes de la table de parcours
Vous pouvez utiliser pour votre cas des critères JPA avec des données de printemps JPA, regardez le lien ci-dessous, il vous donnera ce que vous recherchez: