Java 如何在使用条件时防止在急切关系中联接表

Java 如何在使用条件时防止在急切关系中联接表,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我有三门课,分别是A、B和C,如下所示: 类A与B有OneToOne关系: Class A { @OneToOne B b; } 而B与C有着密切的关系 Class B { @ManyToOne(fetch=fetchType.EAGER) C c; } 我希望有一个条件(在a上),并将其与B连接,以从这两个表中检索一些数据。但当我使用createAlias(或任何其他特定联接)时,表C也被联接。(显然是因为B和C之间的密切关系)。大概是这样的: Criteria

我有三门课,分别是
A
B
C
,如下所示:

A
B
OneToOne
关系:

Class A {
   @OneToOne
   B b;
}
B
C
有着密切的关系

Class B {
    @ManyToOne(fetch=fetchType.EAGER)
    C c;
}
我希望有一个条件(在
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
,我不希望它加入。如何手动阻止此类操作?

您应该能够仅为查询动态指定获取模式:

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();

谢谢我会试试看,然后告诉你结果。我想知道为什么不使用
FetchMode.LAZY
本身?枚举常量
FetchMode.LAZY
已被弃用: