是否可以在命名查询的where子句中使用like?我正在尝试执行以下操作,但正在获得例外
@NamedQuery(name = "Place.getPlaceForCityAndCountryName",
query = "SELECT p FROM Place p WHERE " +
"lower(p.city) like :city and " +
"lower(p.countryName) like :countryName");
我尝试像在普通SQL中那样添加%,但是会编译异常。
任何指针都非常感谢!
由于
答案 0 :(得分:47)
您不能拥有NamedQuery
中的%,但您可以在分配参数的值中使用%。
如:
String city = "needle";
query.setParamter("city", "%" + city + "%");
答案 1 :(得分:8)
您也可以使用CONCAT功能
@NamedQuery(name = "Place.getPlaceForCityAndCountryName",
query = "SELECT p FROM Place p WHERE " +
"lower(p.city) like CONCAT(:city,'%')");
答案 2 :(得分:5)
@Query("select c from Curso c where c.descripcion like CONCAT(:descripcion,'%')")
List<Curso> findByDescripcionIgnoreCase(@Param("descripcion") String descripcion);
答案 3 :(得分:1)
仅使用 JPA,不使用 Spring Data Jpa,您必须定义不带 %
的命名查询,然后使用 %
作为值的一部分包含模式本身,如@esej 所述:>
@NamedQuery(
name = ParametersQueryOnEntityEntity.Queries.BY_LIKE,
query = "SELECT e FROM SomeEntity e WHERE name LIKE :name")
使用 Spring 的 @Query
,您可以定义包含 %
的查询本身,并仅在方法中传递模式值:
@Query("SELECT e FROM SomeEntity e WHERE name LIKE %:name%")
List<SomeEntity> byLike(@Param(PARAM_NAME) String name);
答案 4 :(得分:0)
如果您使用的是位置参数,则可以使用这种方式
@Query("select p from ABC p where p.name like CONCAT('%',?1,'%') ")