0

以下のようAに、3つのクラスがBあります。C

クラスAは とOneToOne関係がありBます:

Class A {
   @OneToOne
   B b;
}

B熱心な関係を築いてCいる。

Class B {
    @ManyToOne(fetch=fetchType.EAGER)
    C c;
}

A条件 ( on ) を持ち、それを結合してB、これら 2 つのテーブルからデータを取得したいと考えています。しかし、私がcreateAlias(または他の特定の結合を)使用すると、テーブルCも結合されます。(どうやら と の間の積極的な関係のためB) C。このようなもの:

Criteria aCrit = session.createCriteria(A.class, "a");
aCrit.createAlias("a.b", "b");
aCrit.setProjection(Projections.property("b.name");
aCrit.list();

問題は、必要がないので、C結合したくないということです。このようなアクションを手動で防止するにはどうすればよいですか?

4

1 に答える 1

0

クエリに対してのみ、フェッチ モードを動的に指定できるはずです。

Criteria aCrit = session.createCriteria(A.class, "a");
aCrit.createAlias("a.b", "b");
aCrit.setFetchMode("b.c", FetchMode.SELECT)
aCrit.setProjection(Projections.property("b.name");
aCrit.list();
于 2013-04-21T06:40:29.790 に答える