1

我有一门课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);
4

2 回答 2

2

在 Hibernate 中,默认情况下会急切地获取一对一的关系——这就是你获得内部连接的原因。尝试这个:

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="B_ID")
B b;
于 2013-03-12T14:53:42.647 回答
0

来自如何避免 HQL 和 Criteria 中不必要的选择和连接。看来这是Hibernate中长期存在的错误。

https://hibernate.atlassian.net/browse/HHH-3538

https://hibernate.atlassian.net/browse/JPA-19

这个问题也让我很困惑。

于 2016-03-25T07:45:38.623 回答