34

是否可以在命名查询的 where 子句中有类似的内容?我正在尝试执行以下操作,但遇到异常

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

我尝试像在普通 SQL 中那样添加 % ,但会编译异常。

任何指针都非常感谢!

谢谢

4

5 回答 5

64

您不能在 % 中包含 % NamedQuery,但可以在分配参数的值中包含它。

如:

String city = "needle";
query.setParamter("city", "%" + city + "%");
于 2012-06-06T10:25:10.770 回答
12

您还可以使用 CONCAT 功能

@NamedQuery(name = "Place.getPlaceForCityAndCountryName",
     query = "SELECT p FROM Place p WHERE " +
        "lower(p.city) like CONCAT(:city,'%')");
于 2016-10-07T08:56:01.580 回答
7
@Query("select c from Curso c where c.descripcion like CONCAT(:descripcion,'%')")

List<Curso> findByDescripcionIgnoreCase(@Param("descripcion") String descripcion);
于 2016-12-07T21:16:30.750 回答
1

仅使用 JPA,没有 Spring Data Jpa,您必须定义命名查询%,然后将模式本身包含%为值的一部分,如 @esej 所述:

  @NamedQuery(
    name = ParametersQueryOnEntityEntity.Queries.BY_LIKE,
    query = "SELECT e FROM SomeEntity e WHERE name LIKE :name")

使用 Spring @Query,您可以使用 include 定义查询本身,%并在方法中仅传递模式值:

  @Query("SELECT e FROM SomeEntity e WHERE name LIKE %:name%")
  List<SomeEntity> byLike(@Param(PARAM_NAME) String name);
于 2021-04-29T08:39:42.683 回答
0

如果你使用的是位置参数,你可以使用这种方式

@Query("select p from ABC p where p.name like CONCAT('%',?1,'%') ")
于 2020-10-17T14:45:42.370 回答