spring data jpa @query解析错误

时间:2016-08-29 20:29:07

标签: java spring jpa spring-data

我今天发现了非常奇怪的错误(?)。所以我只想简单地想要通过两个字段搜索一个给定的输入。期望的代码:

@Query("select c from Customer c where upper(c.name) like %:search% or upper(c.number) like upper(%:search%)")
Page<Customer> findByNameOrNumber(@Param("search") String search, Pageable pageable);

但上面的代码段引发了以下异常:

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract org.springframework.data.domain.Page com.zilliant.webnext.repository.CustomerRepository.findByNameOrNumber(java.lang.String,org.springframework.data.domain.Pageable)!
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:92) ~[spring-data-jpa-1.9.4.RELEASE.jar:na]
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:62) ~[spring-data-jpa-1.9.4.RELEASE.jar:na]
.......
.......
Caused by: java.lang.NullPointerException: null
at org.hibernate.hql.internal.antlr.HqlBaseParser.identPrimary(HqlBaseParser.java:4285)

如果我将查询更改为

select c from Customer c where upper(c.name) like %:search% or upper(c.number) like upper(%:search%)

select c from Customer c where upper(c.name) like upper(%:search%) or upper(c.number) like %:search%

然后查询验证没问题,但行为不正确,上面的部分(%:search%)不起作用。

我为jpql找到了以下解决方案,但弹簧数据并非如此。

namedQuery.setParameter("code", "%" + this.value + "%"); 

无论如何,我有一个解决方法:

Page<Customer> findByNameContainingIgnoreCaseOrNumberContainingIgnoreCase(String name, String number, Pageable pageable);

但是有另一种解决方案而不是11字的方法吗? 谢谢!

0 个答案:

没有答案