結合テーブルで結合された 2 つのテーブルがあります。
@Entity
@Table( name = "a" )
public class A {
@Id
@Column( name = "id", unique = true, nullable = false )
private long id;
@ManyToMany( targetEntity = B.class )
@JoinTable( name = "a_b_join", joinColumns = @JoinColumn( name = "a_id" ), inverseJoinColumns = @JoinColumn( name = "b_id" ) )
private Set<B> bs = new HashSet<B>();
}
@Entity
@Table( name = "b" )
public class B {
@Id
@Column( name = "id", unique = true, nullable = false )
private long id;
}
データベースには多数の A があり、比較的少数の B があります。ほとんどの A には 1 つの B しかありませんが、複数ある場合もあります。A の任意の結果セットに対して、明確な B はほんの一握りです。多対多を熱心にロードすると、同じ B が何度もフェッチされることになります。私がやろうとしているのは、最初の SELECT の結合テーブルから Hibernate に A の B のすべての ID をフェッチさせ、「bs」コレクションにプロキシを設定させることです。次に、各 B はセッションで 1 回だけフェッチされます。
私のアプリケーションで機能する別の方法は、結合テーブルから B ID の Collection を何らかの方法で熱心にロードすることです。