使用条件时如何防止在急切关系中加入表

时间:2013-04-21 06:15:05

标签: java hibernate hibernate-criteria

我有三个班级说ABC如下:

班级AOneToOne的关系B

Class A {
   @OneToOne
   B b;
}

BC有着紧密的关系。

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

我希望有一个标准(在A上)并与B一起加入,以从这两个表中检索一些数据。但是当我使用createAlias(或任何其他特定连接)时,表C也会被加入。 (显然是因为BC之间的热切关系。像这样:

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

问题是,因为我不需要C,所以我不希望它被加入。如何手动阻止此类操作?

1 个答案:

答案 0 :(得分: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();