JPQL 不区分大小写

新手上路,请多包涵

我想按不区分大小写的名称搜索用户表中的数据。

 @Repository
public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where lower(u.name) like %lower(?1)%")
  public List<User> findByNameFree(String name);

}

我收到一个错误: 意外标记:% 。我应该把“%”放在哪里?

原文由 windupurnomo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 762
2 个回答

您可以使用 concat 运算符:

 @Query("select u from User u where lower(u.name) like lower(concat('%', ?1,'%'))")
public List<User> findByNameFree(String name);

或者使用命名参数:

 @Query("select u from User u where lower(u.name) like lower(concat('%', :nameToFind,'%'))")
public List<User> findByNameFree(@Param("nameToFind") String name);

(使用 Spring Boot 1.4.3 测试)

原文由 Wim Deblauwe 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果这只是您想要的,并且您使用的是 Spring Data JPA,则无需编写查询。

 List<User> findByNameContainingIgnoreCase(String name);

否则,您需要用 % 包装 name 属性,然后再将其传递给方法(将这些直接放在查询中根本行不通)。或者不使用查询,而是使用规范或 Criteria API 来创建查询。

原文由 M. Deinum 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题