0

結合テーブルで結合された 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 を何らかの方法で熱心にロードすることです。

4

1 に答える 1

1

それは不可能だと思います。

別の方法として、結合テーブルをエンティティとしてマップし (呼び出し is ABJoin)、ManyToMany を a をターゲットとする OneToMany に置き換え、Set<ABJoin>このセットを熱心にフェッチすることもできます。したがって、それぞれが初期化されていない B へのプロキシを持つ ABJoin のロードされたセットを持つことになります。

于 2013-05-31T22:04:03.163 に答える