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选择我所有的's 并且我想只与它相关联的 Foofetch 一起获取。我不希望s 的集合一起加载。有没有办法在不修改的情况下做到这一点?nameBarComplexObjectBar

我想要这个,因为我想向用户展示类似的东西

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

1 回答 1

1

不,这是不可能的。当您将一个集合标记为 eagrely fetched 时,它总是被热切地获取。如果你想让它延迟加载,它应该被标记为延迟。

但是您可以只选择您的三个属性:

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 回答