9

So if my JPA query is like this: Select distinct p from Parent p left join fetch p.children order by p.someProperty

I correctly get results back ordered by p.someProperty, and I correctly get my p.children collection eagerly fetched and populated. But I'd like to have my query be something like "order by p.someProperty, p.children.someChildProperty" so that the collection populated inside each parent object was sub-ordered by someChildProperty.

This seems intuitive when I think in terms of the sql that is actually generated for these calls, but I guess less so when it tries to map back to hierarchical objects.

4

3 に答える 3

18

順序を維持するには、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)

コンパレータの場合、コンパレータを設置する必要があります。その他は、文字列コレクションでのみ機能する可能性があります。

于 2009-01-03T02:52:47.207 に答える
4

springboot と jpa を使用している場合の例を次に示します。

親クラスに以下のようなコードを追加します

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

上記のコードで、position はUserAddressesクラスのフィールド名で、descは順序です。sql order by のように、ascまたはdescのいずれかを渡すことができます。

于 2021-05-14T17:44:08.513 に答える
1

Adeelは基本的にこれを釘付けにしています。コレクションに同じエンティティが複数回含まれている場合に重要になる可能性があるリストでそれらを使用することもできます。

于 2009-01-03T04:48:46.693 に答える