gpt4 book ai didi

java - JpaRepository中通过自定义SQL排序方法排序

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:30 26 4
gpt4 key购买 nike

是否可以使用 JPA 查询方法表达以下查询?

  @Query(
value =
"SELECT a FROM #{#entityName} a"
+ "LEFT JOIN Other o ON a.otherId = o.id"
+ "ORDER BY CASE WHEN o.foo = 'A' then 1"
+ " WHEN o.foo = 'S' then 2"
+ " WHEN o.foo = 'D' then 3"
+ " ELSE 4"
+ " END, a.createdDate DESC NULLS LAST")
List<T> findAllCustomSorted();

像这样的查询方法

List<T> findAll(Sort sort);

调用了类似的东西

String fooProperty = "CASE WHEN o.foo = 'A' then 1"
+ "WHEN o.foo = 'S' then 2"
+ "WHEN o.foo = 'D' then 3"
+ "ELSE 4"
+ END;
String dateProperty = "createdDate";
repo.findAll(
new Sort(
new Order(Direction.ASC, fooProperty, NullHandling.NULLS_LAST),
new Order(Direction.DESC, dateProperty, NullHandling.NULLS_LAST)));

现在这不起作用。

但是我发现了一些名为 JpaSort.unsafe()JpaPath 的东西,所以想知道在我陷入兔子洞之前我想做的事情是否可能。

最佳答案

如果您有可比较的属性名称,则可以使用排序。尝试更改您使用的选择查询以将排序键包含为另一列:

@Query(
value =
"SELECT a, CASE WHEN o.foo = 'A' then 1"
+ " WHEN o.foo = 'S' then 2"
+ " WHEN o.foo = 'D' then 3"
+ " ELSE 4"
+ " END sort FROM #{#entityName} a"
+ "LEFT JOIN Other o ON a.otherId = o.id"
+ "ORDER BY a.createdDate DESC NULLS LAST")
List<T> findAllCustomSorted();

这意味着您的结果将有两列 - a 及其排序键。现在您可以使用“sort”作为按属性排序:

repo.findAll(new Sort(Sort.Direction.ASC, "sort"));

关于java - JpaRepository中通过自定义SQL排序方法排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com