【发布时间】:2017-07-29 09:01:43
【问题描述】:
我是 Spring Data JPA 的新手。我有这个查询。 LOWER 函数和CONTAINING(case-insensitive) 是必需的。
如果我使用它,它工作正常:
findByCityContainsAndAreaContainsAndType(String city,String area, String type);
使用@Query 的原因是我想使用连接。但是 ('%?1%') 似乎有问题。 不知道如何实现。
@Query(value=" select * from Agreement where LOWER(city) like LOWER('%?1%') and LOWER(AREA) like LOWER('%?2%') and type=?3", nativeQuery = true)
public List<Agreement> getAgreementDetailsByCityAreaAndType(String city,String area, String type);
得到错误:
Caused by: java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
也尝试过 JPA:
@Query(value=" select sa from Agreement sa where LOWER(sa.city) like LOWER('%?1%') and LOWER(sa.area) like LOWER('%?2%') and sa.type=?3")
public List<Agreement> getAgreementDetailsByCityAreaAndType(String city,String area, String type);
同样的问题:
Caused by: java.lang.IllegalArgumentException: Parameter with that position [1] did not exist
也试过用:
LOWER(city) like '%' + LOWER(?1) + '%'
来自: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example.execution
但它在运行时抛出查询语法错误。
有什么建议吗?
谢谢
【问题讨论】:
-
您想使用 jpa 还是原生 sql?正如你所拥有的,nativeQuery = true
-
现在更新了原始帖子,我什至尝试过不使用nativeQuery。同样的例外。
-
使用 JPQL 时,您无需将“%”放在 LOWER 内。
标签: spring jpa spring-data hql spring-data-jpa