2

この質問はどこかで答えられていると思いますが、検索する適切なキーワードが見つからないようです。

私はこれらのエンティティを持っています:

@Entity
Entity1{
    <random fields>

    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "entity_2")
    Entity2 e2;//might be null.
}

@Entity
Entity2{
    <random fields>
    String name;
}

Entity2 の名前で並べ替えられたすべての Entity1 を返すクエリを作成したいと考えています。私はこれを試しました:

SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC

上記のクエリ (mysql でテスト済み) の問題は、e2 が null でない Entity1 のみを返すことです。

私が必要としているのは、e2 が null であっても、すべての Entity1 を取得する方法です。

Ps。Ive 'もこれらを試しましたが、同じ結果が得られました:

SELECT e1 from Entity1 e1 ORDER BY e1.e2 ASC, e1.e2.name ASC
SELECT e1 from Entity1 e1 ORDER BY e1.e2.name ASC, e1.e2 ASC

前もって感謝します!
//HQL初心者

編集:
私が使用する jpa 注釈を追加しました。

4

1 に答える 1

0

JPAを使用している場合、アノテーションの使用は問題に対して非常に簡単です。そのように、アノテーションを使用した1つの例を示します。

ドメインオブジェクトに関連付けられたオブジェクトのコレクションがある場合、通常、ある種のデフォルトの並べ替え順序を指定する必要があります。たとえば、ドメインオブジェクトのタイムラインとイベントがあるとします。

@Entity
class Event {

    @Required
    Integer startYear

    Integer endYear

    @Required
    String description

    @ManyToOne
    Timeline timeline
}

このソート順は、「startYear、endYear」ソート順でJPA@OrderByを使用する場合と同じです。ただし、実際のSQLはHibernateの@OrderByで記述しているため、データベース間の移植性を犠牲にして、データベースの機能を利用できます。例として、Oracle 10gは、「start_yearで順序付け、end_year nullsを最初に」などの構文を使用して、null以外の終了年の前にnull終了年を順序付けることをサポートしています。

@org.hibernate.annotations.OrderBy。SQLフラグメントをドメインクラスに追加することは、必ずしも世界で最もエレガントなことではありませんが、最も実用的なことかもしれません。

于 2012-12-21T10:57:58.677 に答える