标准部分获取@ManyToOne关系

时间:2013-01-09 20:09:34

标签: java hibernate criteria

是否有办法仅部分使用条件来获取关联的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,我希望只与其关联的name的{​​{1}}一起获取。我不希望将Bar的集合加载到一起。有没有办法在不修改ComplexObject的情况下实现这一目标?

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

的内容
Bar

1 个答案:

答案 0 :(得分:1)

不,这是不可能的。当你将一个系列标记为被抓取时,它总是被急切地取出。如果你想延迟加载它,它应该被标记为懒惰。

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

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";