web-dev-qa-db-fra.com

Requête nommée avec comme dans la clause where

Est-il possible d'avoir un like dans une clause where dans une requête nommée? J'essaie de faire ce qui suit mais j'obtiens des exceptions

@NamedQuery(name = "Place.getPlaceForCityAndCountryName",
query = "SELECT p FROM Place p WHERE " +
        "lower(p.city) like :city and " +
        "lower(p.countryName) like :countryName");

J'ai essayé d'ajouter% comme vous le feriez dans SQL normal mais j'obtiens la compilation d'exceptions.

Tous les pointeurs grandement appréciés!

Merci

27
RNJ

Vous ne pouvez pas avoir le% dans le NamedQuery, mais vous pouvez l'avoir dans la valeur que vous affectez au paramètre.

Un péché:

String city = "needle";
query.setParamter("city", "%" + city + "%");
51
esej

Vous pouvez également utiliser la fonction CONCAT

@NamedQuery(name = "Place.getPlaceForCityAndCountryName",
     query = "SELECT p FROM Place p WHERE " +
        "lower(p.city) like CONCAT(:city,'%')");
8
overmind1001
@Query("select c from Curso c where c.descripcion like CONCAT(:descripcion,'%')")

List<Curso> findByDescripcionIgnoreCase(@Param("descripcion") String descripcion);
6
jean