为什么我的 HQL 忽略Where 子句

发布于 2025-01-02 13:46:38 字数 525 浏览 1 评论 0原文

我有这样的代码:

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)

I have this code:

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>();

It returns all objects from Foo1 and ignores where clause. Why? Where is probably mistake?

Next experiments:

 (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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陌伤ぢ 2025-01-09 13:46:38

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

I had the same problem and it is little bit confusing for me as well, but in one example I found this note: "You don't need the WHERE clause as Hibernate "knows" how to match primary and foreign keys based on the mapping." This "Where" was related to JOIN condition so just try to remove your USING() part.

盛夏尉蓝 2025-01-09 13:46:38
  1. 使用 SQL Profiler 查看发送到服务器的 SQL 是否正确。
  2. 简化查询直到它起作用。然后逆向查找错误。删除连接获取以查看它是否更改了某些内容。
  1. Use SQL profiler to see whether the SQL that gets sent to the server is correct.
  2. Simplify the query until it works. Then work backwards to find the error. Remove the join fetch to see if it changes something.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文