2

私のモデル:

@Entity
class Person {
    @Id
    long id;
    @OneToMany
    Set<Employment> employments =  new HashSet<Employment>();
}

@Entity
class Employment {
    @Id
    long id;
    @ManyToOne
    Company company;
    Date from;
    Date until;
}

これは、時間間隔によって制限されているaPersonと aの間の関連付けです。Company

Person特定の時間にすべての s とその雇用を選択する JPA 基準クエリを探しています。

期待される結果は、すべてのList<Person>を含むであり、それぞれのコレクションには、特定の基準に一致する雇用のみが含まれます (または雇用がまったくありません)。employmentsPerson

@Where雇用のフィルター基準は可変であるため、これは賢明なアプローチではありません。

これは合理的なことですか?これを別の方法で行う方法はありますか?

4

1 に答える 1

1

いいえ、それは合理的なことではありません。エンティティは、特定のクエリによって返される日付ではなく、データベース内のデータを表すと想定されています。

ManyToOne アソシエーションを からEmploymentに追加してPerson、雇用を検索するだけです。人物のセットが必要な場合は、雇用を反復処理して、各雇用の人物を Set に追加します。この日付で雇用に関連付けられた人物が必要な場合は、カスタム クラスまたはMultiMap<Person, Employment>.

String hql = "select employment from Employment employment"
             + " left join fetch employment.person"
             + " where :date between employment.startDate and employment.endDate";
List<Employment> employments = session.createQuery(hql)
                                      .setDate("date", date)
                                      .list();
于 2012-09-24T11:25:32.583 に答える