Spring Data JPA - 如何创建查询(6) 排序

作者简介

陈喆,现就职于中科院某研究所担任副研究员,专注于工业云平台、MES系统的设计与研发。

内容来源:https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/#jpa.query-methods.sorting

排序可以通过PageRequest或Sort实现。Sort的Order实例的属性需要与你的实体模型的属性匹配,即你需要将其分解成查询所需的属性或别名。

使用任何不可引用的路径表达式都会导致异常。

然而,结合使用@Query和Sort会导致在ORDER BY子句中混入未进行路径检测的带有函数的Order实例。这可能是由于Order被追加到了给定的查询字符串上。默认情况下,Spring Data JPA拒绝使用任何包含函数调用的Order实例,但你可以使用JpaSort.unsafe添加潜在不安全的排序。

下例使用了Sort和JpaSort,包括JapSort的非安全选项:

public interface UserRepository extends JpaRepository<User, Long> {

  @Query("select u from User u where u.lastname like ?1%")
  List<User> findByAndSort(String lastname, Sort sort);

  @Query("select u.id, LENGTH(u.firstname) as fn_len from User u where u.lastname like ?1%")
  List<Object[]> findByAsArrayAndSort(String lastname, Sort sort);
}

repo.findByAndSort("lannister", new Sort("firstname"));          --1     
repo.findByAndSort("stark", new Sort("LENGTH(firstname)"));      --2     
repo.findByAndSort("targaryen", JpaSort.unsafe("LENGTH(firstname)"));   --3
repo.findByAsArrayAndSort("bolton", new Sort("fn_len"));        --4
  1. 指向实体模型属性的合法Sort表达式。
  2. 包含函数调用的不合法Sort,会抛出异常。
  3. 包含显式指定不安全Order的合法Sort。
  4. 执行带别名函数的合法Sort表达式。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值