2017-02-11 5 views
0

ORDER BYをクエリで使用して、参照されたオブジェクトのフィールドでソートしようとしています。たとえば、次のクラスを使用します。JPA2/Hibernate Order参照されたテーブル/オブジェクトのフィールドを使用することによって

@Entity 
class Phone 
{ 
    @Id 
    Long id; 

    @ManyToOne 
    Person owner; 
} 

@Entity 
class Person 
{ 
    @Id 
    Long id; 

    String name; 
} 

すべての電話機をリストにしたい場合は、オーナーの名前で注文してください。 ほとんどの場合、所有者のない電話は除きます。 (IE。、オーナーはヌルです)。

例えば、

{ 
    etc... 
    // Count number of phones in database 
    Query q = em.createQuery("SELECT COUNT(*) FROM Phone"); 
    Number n = (Number)q.getSingleResult(); 
    // N shows 10 phones 

    q = em.createQuery("SELECT row FROM Phone row ORDER BY row.owner.name"); 
    List<Phone> phones = q.getResultList(); 
    // phones.size() is only 5??? 
} 

はCOALESCE(row.owner.name、 '') BY ORDERを使用すると、いずれか欠落している行をフェッチしません!

ご協力いただきありがとうございます!

+1

をPHONENUMBERのない所有者がない場合

SELECT row FROM Phone row LEFT OUTER JOIN row.owner o ORDER BY o.name 

oはnullになりますので、外部結合とCOALESCEを使用する必要があります:

これを試してみてくださいそこ。クエリに所有者を含めると、暗黙のうちに内部結合が行われます。 – zmf

答えて

1

暗黙の内部結合を使用すると、結果の数が両方の表に表現された項目の数に減らされます。あなたは、外部結合を指定する必要があります...

+0

完璧!ありがとう。 – Jamie

関連する問題