我有三个班级说A
,B
和C
如下:
班级A
与OneToOne
的关系B
:
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
,所以我不希望它被加入。如何手动阻止此类操作?
答案 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();