web-dev-qa-db-fra.com

% Like% Requête au printemps JpaRepository

J'aimerais écrire une requête similaire dans JpaRepository mais elle ne renvoie rien:

LIKE '%place%'- ça ne marche pas.

LIKE 'place' fonctionne parfaitement.

Voici mon code:

@Repository("registerUserRepository")
public interface RegisterUserRepository extends 
JpaRepository<Registration,Long>{

    @Query("Select c from Registration c where c.place like:place")
     List<Registration> findByPlaceContaining(@Param("place")String place);
}
84
sudeep cv

La requête JPA des données de printemps nécessite les caractères "%", ainsi qu'un caractère espace après like dans votre requête, comme dans

@Query("Select c from Registration c where c.place like %:place%").

Cf. http://docs.spring.io/spring-data/jpa/docs/current/reference/html .

Vous voudrez peut-être vous débarrasser de l'annotation @Query, car elle semble ressembler à la requête standard (mise en œuvre automatiquement par les mandataires de données de printemps); c'est-à-dire en utilisant la ligne unique

List<Registration> findByPlaceContaining(String place);

est suffisant.

167
Hille

Vous n'avez pas besoin de l'annotation @Query.

Vous pouvez simplement utiliser ce qui suit

    @Repository("registerUserRepository")
    public interface RegisterUserRepository extends JpaRepository<Registration,Long>{

    List<Registration> findByPlaceIgnoreCaseContaining(String place);

    }
81
Alexius Diakogiannis

Vous pouvez également implémenter les mêmes requêtes en utilisant le mot-clé pris en charge par Spring Data JPA "contenant" .

List<Registration> findByPlaceContaining(String place);
22
amanzoor

Pour votre cas, vous pouvez directement utiliser les méthodes JPA. C'est comme ci-dessous:

contenant: sélectionnez ... comme%: place%

List<Registration> findByPlaceContainingIgnoreCase(String place);

ici, IgnoreCase vous aidera à rechercher un élément en ignorant le cas.

Utilisation de @Query en JPQL :

@Query("Select registration from Registration registration where 
registration.place LIKE  %?1%")
List<Registration> findByPlaceContainingIgnoreCase(String place);

Voici quelques méthodes connexes:

  1. J'aime findByPlaceLike

    … Où x.place comme? 1

  2. Démarrer avec findByPlaceStartingWith

    … Où x.place like? 1 (paramètre lié avec% ajouté)

  3. EndingWith findByPlaceEndingWith

    … Où x.place like? 1 (paramètre lié avec% ajouté)

  4. Contenant findByPlaceContaining

    … Où x.place like? 1 (paramètre lié enveloppé dans%)

Plus d'infos, voir ce lien , ce lien et ceci

J'espère que cela vous aidera :)

15
Md. Sajedul Karim

Vous pouvez avoir une alternative d'utiliser des espaces réservés en tant que:

@Query("Select c from Registration c where c.place LIKE  %?1%")
List<Registration> findPlaceContainingKeywordAnywhere(String place);
5
Nitin Pawar

répondre exactement sera

 -> `@Query (" sélectionnez la catégorie u où u.categoryName comme%: input% ") 
 Liste findAllByInput (@Param (" input ") Chaîne entrée); 
1
Sulaymon Hursanov

quand call function, j'utilise: findByPlaceContaining("%" + place);

ou: findByPlaceContaining(place + "%");

ou: findByPlaceContaining("%" + place + "%");

1
user9290654

Essaye ça.

@Query("Select c from Registration c where c.place like '%'||:place||'%'")
1
Ashu