【发布时间】:2020-10-01 01:08:33
【问题描述】:
我已从本网站上的帖子中就我的问题听取了建议,但我认为我的方向并不正确。我正在努力解决的问题是提供一种使用 jpql 的排序方法,可以使用此表进行演示:
Name | Address | City |
--------------------------
A | A | C |
C | B | B |
B | C | A |
我希望这样当我传入列名时,我将能够按列对所有行的结果进行排序。例如,如果我要按名称订购,那么它应该返回 A B C 而不是 A C B。
我正在尝试的目标是,当我为我的 API 传递一个参数时:
http://localhost:8080/api/person?sorting=city
现在我知道这可以通过以下方式解决:
http://localhost:8080/api/person?sort=city,asc
但是我无法在这种情况下使用排序参数,因为我依赖来自多个域的信息。因此,我决定看看是否可以在我的存储库中创建一个可用于对值进行排序的查询。到目前为止,这是我的尝试:
@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 创建一个自定义排序参数,该参数应在调用端点时应用于结果。
【问题讨论】:
-
那么当你运行它时会发生什么?会报错吗?
-
你好@ShubhamSrivastava 它没有,因为不太确定它会如何链接。
-
这不是一个好主意,直接将排序传递给sql。您可能会遇到 SQL 注入等安全问题。
标签: java sql spring-boot jpql