0

ManyToOne基準のみを使用して、関連付けられた関連エンティティを部分的にフェッチする方法はありますか?

私は次の場合があります

@Entity
public class Foo {
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private Bar bar;
    // getters/setters and lots other attributes
}

@Entity
public class Bar {
    private String name;
    @OneToMany(fetch = FetchType.EAGER)
    private Collection<ComplexObject> complexObjects;
    // getters/setters
}

そして、私はCriteriaすべての自分を選択するを持っており、それに 関連付けられているFooものだけを一緒にフェッチしたいと思います。のコレクションを一緒にロードしたくありません。変更せずにそれを達成する方法はありますか?nameBarComplexObjectBar

これが欲しいのは、ユーザーに次のようなものを表示したいからです。

      Foo.Attr1, Foo.Attr2, Foo.Bar.Name
4

1 に答える 1

1

いいえ、それは不可能です。コレクションをイーグルフェッチ済みとしてマークすると、常にイーグルフェッチされます。遅延ロードする場合は、遅延マークを付ける必要があります。

ただし、次の3つの属性のみを選択できます。

Criteria c = session.createCriteria(Foo.class, "foo");
c.createAlias("foo.bar", "bar");
c.setProjection(Projections.projectionList().add(Projections.property("foo.attr1"))
                                            .add(Projections.property("foo.attr2"))
                                            .add(Projections.property("bar.name")));

または、はるかに読みやすい:

String hql = "select foo.attr1, foo.attr2, bar.name from Foo foo"
             + " inner join foo.bar bar";
于 2013-01-09T20:16:41.797 に答える