2009-07-09 18 views
8

次の問題があります。私は3つのクラスA、B、Cを持っています。Aには、B:sのOneToMany関係リストが含まれています。 BにはCとのManyToOne関係があります。Cには「名前」というフィールドがあり、Bには「名前」というフィールドもあります。私が達成したいのは、Aのリスト内の項目を主にCの名前で並べ替え、Bの名前で2番目に並べ替えることです。問題は私がこれを行う方法を知らないことです。それも可能ですか?リストの順序を定義する

JPAプロバイダとしてEclipseLinkを使用しています。


class A { 
    @OneToMany 
    @OrderBy("b.c.name, b.name") <---- this is the problem 
    List<B> b; 
} 

class B { 
    @ManyToOne 
    C c; 
    String name; 
} 

class C { 
    String name; 
} 

EDITは はい、私は@OrderByは(「c.name」)は動作しません。例えば、さまざまなバリエーションを試してみた、私はちょうどエンティティクラスbが含まれていないことを私に言って、エラーメッセージが表示されます"c.name"というフィールド。

答えて

9

これは不可能です。 @OrderByは、ネストされたプロパティではなく直接のプロパティ/フィールド名のみを受け入れます。あなたのフェッチ戦略に応じて、 "c"テーブルがあなたの "b"を取得するために発行された選択肢の一部ではないかもしれないので、実際には意味があります。

0

@OrderBy("c.name", "name")を試しましたか?

「b」は使用しないでください。これは、@ OrdersByがb配列のBのインスタンスの列に対して行われることを暗示しているためです。

0

あなたが試してみました:

@OrderBy("c.name ASC", "name ASC") 

を?

2

ChssPly76が正しい。

SELECT b 
FROM B b 
WHERE b.a = :mya 
ORDER BY b.c.name 
:あなたは何ができるか

は、このような名前のクエリを作成することです

関連する問題