私は多対多の関係で「学生」と「クラス」を持っています。間にリンクテーブルがあります。
次の方法で HQL を使用してすべての学生を取得したい場合は、すべて問題ありません。
Query queryObject = getSession().createQuery("from Student");
return queryObject.list();
上記のコードでは、3 人の学生がいる場合、3 人の学生のリストを取得します。
ただし、基準を使用する場合は、リンク テーブルに関連付けがない限り問題ありません。
Criteria crit = getSession().createCriteria(Student.getClass());
return crit.list();
2 番目のコードでは、リンク テーブルが空の場合にのみ 3 つの結果が得られます。ただし、関連付けを追加すると、6 つの結果が得られます。ログを見ると、Hibernate は複数の選択を生成します。それはどのように可能ですか?
誰かがなぜこれが起こるのか説明できますか? 3 つのレコードを 1 回だけ返すように条件を修正するにはどうすればよいですか?
編集
Student クラスでは、次のようにマッピングしました。
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="room_student_rel"
, joinColumns={
@JoinColumn(name="id_student")
}
, inverseJoinColumns={
@JoinColumn(name="id_room")
}
)
private List<Room> rooms;
部屋(クラス)で、私はこのようにマッピングしました:
@OneToMany(fetch=FetchType.EAGER, mappedBy="room")
@Fetch(FetchMode.SELECT)
private List<RoomStudent> roomStudents;