带有 like in where 子句的命名查询

2022-09-01 07:15:09

是否可以在命名查询的 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中那样添加%,但得到了异常编译。

任何指点非常感谢!

谢谢


答案 1

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

如:

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

答案 2

您也可以使用 CONCAT 函数

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

推荐