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);
}
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.
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);
}
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);
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:
J'aime findByPlaceLike
… Où x.place comme? 1
Démarrer avec findByPlaceStartingWith
… Où x.place like? 1 (paramètre lié avec% ajouté)
EndingWith findByPlaceEndingWith
… Où x.place like? 1 (paramètre lié avec% ajouté)
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 :)
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);
répondre exactement sera
-> `@Query (" sélectionnez la catégorie u où u.categoryName comme%: input% ") Liste findAllByInput (@Param (" input ") Chaîne entrée);
quand call function, j'utilise: findByPlaceContaining("%" + place);
ou: findByPlaceContaining(place + "%");
ou: findByPlaceContaining("%" + place + "%");
Essaye ça.
@Query("Select c from Registration c where c.place like '%'||:place||'%'")