[英]Hibernate (JPA) how to do an eager query, loading all child objects
[英]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 順序傳遞asc或desc 。
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.