![](/img/trans.png)
[英]Spring Data JPA with Hibernate - OnetoMany Relationship Mapped Entities - Partial Commit Issue
[英]Sorting entities by their @OneToMany relationship property with Spring Data JPA
我正在开发使用 Spring Data JPA 作为其持久层的 Spring Boot Web 应用程序。 从存储库检索实体时,我使用 Spring 的 Data JPA Sort
对象对它们进行排序。 当我按检索到的实体属性或 @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.>
}
和
@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.>
}
现在,当我使用 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
结果列表将是芭芭拉(她的书“字母 A”是按书名排序后的第一个)然后是安德鲁。
现在传递new Sort(Sort.Direction.ASC, "books.title")
导致“Barbara, Andrew, Andrew, Barbara”——这意味着结果列表中有重复项——我希望结果是不同的。
我不想在 Author 的收藏中使用@OrderBy
,因为我对实际的图书订单不感兴趣 - 只有作者。
我不想使用@Query
在存储库级别使用 JPQL 对结果进行排序(使用某些 JPQL 子查询和虚拟字段可能是可能的),因为我需要它能够动态接受可排序的文件(现在可能是标题,但其他情况下的 isbn 编号和我的 API 应该能够采用其中一种)。
它必须与我用来过滤结果的 Spring Specification API 一起使用。
是否可以?
我有同样的问题,但我找到了这个答案:
@OneToMany
@OrderBy("value ASC") // sort by value ASC
private List<PropertyDefinition> propertyDefinitions;
检查此链接中的答案: 嵌套集合上的 Spring Data JPA 排序
它解决了我的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.