簡體   English   中英

JPA 查詢中子對象的排序返回

[英]Ordering return of Child objects in JPA query

因此,如果我的 JPA 查詢是這樣的: Select distinct p from Parent p left join fetch p.children order by p.someProperty

我正確地得到了由 p.someProperty 排序的結果,並且我正確地得到了我的 p.children 集合急切地獲取和填充。 但我想讓我的查詢類似於“按 p.someProperty,p.children.someChildProperty 排序”,以便填充在每個父 object 中的集合由 someChildProperty 子排序。

當我考慮為這些調用實際生成的 sql 時,這似乎很直觀,但是當它嘗試將 map 返回到分層對象時,我猜想更少。

為了保持順序,請使用TreeSet 就父級內部集合的排序而言,只需在您的代碼中使用Comparator 即可

好吧,在您的父實體類中的集合定義上試試這個。 我希望你明白我的意思。

您可以使用此 JPA 注釋,

@javax.persistence.OrderBy(value = "fieldName")

或者這個 Hibernate 特定的,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc")

你也可以使用這個,

@org.hibernate.annotations.Sort(type = SortType.NATURAL)

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR)

在比較器的情況下,必須有比較器。 其他可能只適用於字符串集合。

如果您使用的是 springboot 和 jpa,這里是示例

在父類中添加如下代碼

@OneToMany(mappedBy = "user")
@OrderBy(value = "position desc ")
private List<UserAddresses> userAddresses;

上面代碼中,position是UserAddresses Class中的字段名, desc是順序。 您可以按 sql 順序傳遞ascdesc

Adeel 基本上已經解決了這個問題。 您還可以將那些與 List 一起使用,如果您的集合多次包含相同的實體,這可能很重要。

使用org.springframework.data.domain.Sort您可以在擴展org.springframework.data.jpa.repository.JpaRepository的存儲庫 class 中調用方法時實現這一點。

例如,假設Teacher實體是School的孩子, Student實體是Teacher的孩子

teacherRepository.findAll(Sort.by("school.name", "student.lastName"))

將按父實體的name屬性排序結果,然后按子實體的lastName屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM