Ple*_*usz 9 java sorting jpa spring-data-jpa
我正在开发使用 Spring Data JPA 作为其持久层的 Spring Boot Web 应用程序。从存储库检索实体时,我使用 Spring 的 Data JPASort对象对它们进行排序。当我按检索到的实体属性或 @OneToOne 关系对象属性进行排序时,它会起作用,但我想用它来按 @OneToMany 关系对象属性之一进行排序。
让我们用一个例子来解释:假设我有一个实体对象Author,它与另一个实体有一对多的关系Book。我的最简单形式的实体类如下所示:
@Entity
public class Author {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@OneToMany(mappedBy = "author")
private List<Book> books;
<constructor, getters, setters etc.>
}
Run Code Online (Sandbox Code Playgroud)
和
@Entity
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
<constructor, getters, setters etc.>
}
Run Code Online (Sandbox Code Playgroud)
现在,当我使用 Spring 的存储库接口检索作者时,我将 Sort 对象传递给它,如下所示:
new Sort(Sort.Direction.ASC, "id")
这给了我按作者 ID 升序排序的结果。我想通过这样的事情:
new Sort(Sort.Direction.ASC, "books.title")
假设我在数据库中有这些数据(简化表只是为了显示示例):
author | book_title
---------------------
Andrew | Letter C
Barbara | Letter A
Andrew | Letter B
Barbara | Letter D
Run Code Online (Sandbox Code Playgroud)
结果列表将是芭芭拉(她的书“字母 A”是按书名排序后的第一个)然后是安德鲁。
路过new Sort(Sort.Direction.ASC, "books.title")现在导致“芭芭拉,安德鲁,安德鲁,芭芭拉” -这意味着有在结果列表重复-我想结果是不同的。
我不希望使用@OrderBy中笔者就收集,因为我不是真正的图书感兴趣秩序-只有作者。
我不想在存储库级别使用 JPQL 对结果进行排序@Query(使用某些 JPQL 子查询和虚拟字段可能是可能的),因为我需要它能够动态接受可排序的文件(现在可能是标题,但 isbn其他情况下的编号,我的 API 应该能够采用其中一种)。
它必须与我用来过滤结果的 Spring Specification API 一起使用。
是否可以?
小智 5
我有同样的问题,但我找到了答案:
@OneToMany
@OrderBy("value ASC") // sort by value ASC
private List<PropertyDefinition> propertyDefinitions;
Run Code Online (Sandbox Code Playgroud)
检查此链接中的答案: Spring Data JPA Sorting on Nested Collection
它解决了我的问题。
| 归档时间: |
|
| 查看次数: |
2982 次 |
| 最近记录: |