为什么我的HQL忽略Where子句

时间:2012-02-02 22:54:26

标签: c# .net nhibernate hql

我有这段代码:

IList<Foo1> ou = session.CreateQuery("from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1) where f2.foo3.year ='2004'").List<Foo1>();

它返回Foo1中的所有对象并忽略where子句。为什么?哪里可能是错误的?

接下来的实验:

 (1) from Foo2 as f2 where f2.year = '2004'  //is OK
 (2) from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1)  //is OK
 (3) from Foo1 as f1 JOIN FETCH f1.foo2 as f2 USING (id_foo1) where f2.year = '2004'  //returns the same result as (2)

2 个答案:

答案 0 :(得分:1)

  1. 使用SQL事件探查器查看发送到服务器的SQL是否正确。
  2. 简化查询直到它工作。然后向后工作以找到错误。删除联接提取以查看它是否发生了变化。

答案 1 :(得分:1)

我遇到了同样的问题,对我来说也有点困惑,但在一个例子中我发现了这个注释:“你不需要WHERE子句,因为Hibernate”知道“如何匹配主键和外键关于映射。“这个“Where”与JOIN条件有关,所以只是尝试删除你的USING()部分。