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
已被弃用: