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を使用すると、いずれか欠落している行をフェッチしません!
ご協力いただきありがとうございます!
をPHONENUMBERのない所有者がない場合
oはnullになりますので、外部結合とCOALESCEを使用する必要があります:
これを試してみてくださいそこ。クエリに所有者を含めると、暗黙のうちに内部結合が行われます。 – zmf