0

我有三个班级说,A如下所示:BC

A与 有OneToOne关系B

Class A {
   @OneToOne
   B b;
}

并与B有着热切的关系C

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

我想有一个标准(on A)并将其加入B以从这两个表中检索一些数据。但是当我使用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 回答