我有一个班级A
,里面有另一个班级B
。像这样:
@Table(name = "A")
Class A {
@OneToOne
@JoinColumn(name="B_ID")
B b;
}
我希望得到这样的查询:
SELECT * from A where B_ID = 4
但是当我使用Criteria
来实现我的目标时,内部联接这两个表。我怎么能像我说的那样SELECT
。
<小时/> 如果它有帮助,我的评论标准是这样的:
DetachedCriteria crit = DetachedCriteria(A.class, "a");
crit.createAlias("a.b", "b");
crit.add(Restrictions.eq("b.id", 4));
getHibernateTemplate().findByCriteria(crit);
答案 0 :(得分:2)
默认情况下,在Hibernate中急切地获取一对一的关系 - 这就是你获得内部联接的原因。试试这个:
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="B_ID")
B b;
答案 1 :(得分:0)
来自How to avoid unnecessary selects and joins in HQL and Criteria。它似乎是Hibernate中一个长期存在的错误。
https://hibernate.atlassian.net/browse/HHH-3538
https://hibernate.atlassian.net/browse/JPA-19
这个问题让我很困惑。