私は一対多の関係にある2つのクラスを持っています:
Class Competition{
@OneToMany(fetch=FetchType.EAGER, mappedBy="competition")
public Set<Event> getEvents() {
return events;
}
}
Class Event{
@ManyToOne
@JoinColumn(name="id_competition")
public Competition getCompetition() {
return competition;
}
}
以下のクエリを実行すると、必要以上のデータを受け取ります。データベースには、競争エントリがあり、それを c1 と呼び、3 つのイベント: e1、e2、e3 とします。イベントの 1 つが条件を満たしていません (e1 の stardate < '2013-09-13') が、クエリを実行すると、2 つではなく 3 つのイベントが取得されます。データベース内のデータについて確信があるので、where句の問題?
"select com from Competition as com inner join com.events event where event.expectedStartdate > '2013-09-13' "
また、条件を満たす 2 つのイベントを削除し、条件を満たさないイベントを保持する場合、クエリは何も返さない (オブジェクト コンペティションなし) ことを指定する必要があります。
私もwith
句を試しましたが、同じ結果が得られました。