作者简介
陈喆,现就职于中科院某研究所担任副研究员,专注于工业云平台、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
- 指向实体模型属性的合法Sort表达式。
- 包含函数调用的不合法Sort,会抛出异常。
- 包含显式指定不安全Order的合法Sort。
- 执行带别名函数的合法Sort表达式。