【发布时间】:2017-03-14 09:14:49
【问题描述】:
我需要从 CrudRepository 中检索一些 Entity 字段:
public class User {
private String name;
// getters and setters
}
public interface UserRepository extends CrudRepository<User, Long> {
@Query("SELECT U.name FROM User U WHERE LOWER(U.name) LIKE LOWER(?1)")
List<String> findByName(String matchPhrase);
}
基本上,我想得到等效的 SQL 查询:
SELECT u.name FROM user u WHERE LOWER(u.name) LIKE LOWER('match%')
问题是@Query不起作用(返回空列表),hibernate生成日志:
Hibernate: select user0_.name as col_0_0_ from user user0_ where lower(user0_.name) like lower(?)
我实际上不知道如何指定附加 % 绑定的参数。
// also fails at compile-time
@Query("SELECT U.name FROM User U WHERE LOWER(U.name) LIKE LOWER(?1%)")
org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:行附近为空...
这工作正常,但返回整个实体,可能会产生长响应,因为我只需要检索特定字段:
List<User> findByNameStartingWithIgnoreCase(String match);
【问题讨论】:
-
当您询问错误时,请始终发布准确且完整的错误消息和堆栈跟踪。当询问一些不起作用的事情时,请始终说明您期望发生什么,以及会发生什么。
-
如果返回空列表,并且您将
"match%"作为参数传递给该方法,则仅表示没有用户的名称以“匹配”开头。 -
不,我实现了这样的不区分大小写的服务,它工作正常,问题出在第二个 LOWER() - ... LIKE LOWER(?1)
-
你将什么作为参数传递给方法,表格包含什么?
标签: java spring-data spring-data-jpa