J'utilise le JPA Hibernate avec Spring Boot, et j'ai un problème pour renvoyer les résultats d'un CRUDRepository
où j'ai écrit une requête SQL personnalisée en utilisant la balise @Query
. Lorsque j'accède à DAO et exécute la méthode, il se déclenche correctement, mais rien n'est renvoyé à partir de la requête.@Query L'annotation ne remplit pas et n'exécute pas les paramètres
public interface ContactRepository extends CrudRepository<Contact, BigInteger> {
@Query(value ="SELECT * FROM all_contacts ac WHERE ac.userid= :userId " +
"AND LOWER(ac.city) LIKE CONCAT('%', LOWER(:city), '%')",
nativeQuery=true)
List<Contact> findAllUserContactsByCityPartialMatch(@Param("city") String city, @Param("userId") BigInteger userId);
}
et quand je tire hors du code dans un modèle ou contrôleur quelque part:
@Autowired
ContactRepository contactDAO
List<Contact> results = contactDAO.findAllUserContactsByCityPartialMatch("Chicago", 12345);
results
sera toujours vide
Mon enregistreur me dit qu'il est mise à feu de cette requête:
SELECT * FROM all_contacts ac
WHERE ac.userid= ? AND LOWER(ac.city) LIKE CONCAT('%', LOWER(?), '%')
Je sais que la requête est correcte, car lorsque je lance la requête et remplit les champs m anuellement dans le terminal MySQL, je reçois un résultat.
SELECT * FROM all_contacts ac
WHERE ac.userid= 12345 AND LOWER(ac.city) LIKE CONCAT('%', LOWER("Chicago"), '%')`
, je sais aussi la DB est correctement configuré, parce que si je lance dire
Iterable<Contact> contactItr = contactDAO.findAll();
dans le même modèle qui a été mentionné plus haut, je reçois plusieurs persista résultats retour de la DB. Je pense qu'il ne remplit pas les paramètres ou ne les exécute pas avec les paramètres de la classe CRUDRepository
, mais je ne suis pas sûr. Des pensées? Merci!
Aha, que presque œuvres, sauf qu'il génère une requête SQL en utilisant une Comme, mais ne pas ajouter de caractères génériques , ne renvoyant aucun résultat Ne devrait-il pas être lancé dans "%"? La fin d'une requête comme celle que vous avez écrite finit par être: 'from all_contacts contact0_ where (supérieur (contact0_.city) comme supérieur (?)) Et contact0_.userid =?' – NateH06
Ah, je mettais '' '' s autour des paramètres de recherche du côté client où ils arrivaient, donc il n'ajoutait pas correctement les '%' ' Cependant, comment rechercherais-je des nombres partiellement complétés? Même juste un" commence par "? ajouter le% dans ce cas – NateH06