1
votes

Comment appliquer des critères de recherche (spécification) sur des méthodes personnalisées de référentiel jpa?

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>


0 commentaires

3 Réponses :


0
votes

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); 
}


1 commentaires

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



0
votes

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);


3 commentaires

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



0
votes

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:

description complète


0 commentaires