我已经采纳了这个网站上关于我的问题的帖子的建议,但是我不相信我的方向是正确的。我正在努力解决的问题是提供一个使用jpql的排序方法,可以使用下表来演示:
Name | Address | City |
--------------------------
A | A | C |
C | B | B |
B | C | A |
我希望这样,当我传入一列的名称时,我将能够按列排序所有行的结果。例如,如果我要按名称排序,那么它应该返回bc而不是cb。
我尝试的目标是,当我为api传入一个参数时:
http://localhost:8080/api/person?sorting=city
现在我明白了这可以通过以下方法解决:
http://localhost:8080/api/person?sort=city,asc
但是,我不能在这种情况下使用sort参数,因为我依赖于来自多个域的信息。因此,我决定看看是否有可能在我的存储库中创建一个查询,用于对值进行排序。这是我迄今为止的尝试:
@Query("SELECT p FROM DePerson p, DeClass c, DeSchool s" +
"WHERE p.personId = c.id " +
"AND su.schoolId = s.id " +
"ORDER BY :ordering")
List<DePerson> sortingAll(String sorting);
因此,我尝试查看是否能够从存储库传入此查询,并在服务方法中使用它作为传递端点时对结果的排序方法:
List<PersonDTO> result = new ArrayList<>();
Page<DePerson> page;
List<DePerson> personList = page.getContent();
for (DePerson person: personList) {
result.add(convertDTO(person));
}
return new PageImpl<>(result, pageable, page.getTotalElements());
最后,我尝试使用jpql创建一个自定义排序参数,当调用端点时,该参数应该应用于结果。
1条答案
按热度按时间w8biq8rn1#
对于动态查询,建议使用criteriaapi,以便实现您的目标。
首先,向personrepository和AutowiredEntityManager添加一个实现,使其具有类似的功能
然后形成您的服务或控制器,您可以自动连接此存储库,您将获得所需的行为。