HQL错误:预期加入的路径


100

我一直在尝试此查询的变体,但似乎无法实现。我也引用了这篇文章:期望加入的路径!Nhibernate错误,似乎无法对我的查询应用相同的逻辑。我的User对象有一个UserGroup收藏。

我了解查询需要引用对象内的实体,但据我所知...

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN User u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

Answers:


131
select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname

作为命名查询:

@NamedQuery(
  name = "User.findByGroupId",
  query =
    "SELECT u FROM UserGroup ug " +
    "INNER JOIN ug.user u WHERE ug.group_id = :groupId ORDER BY u.lastname"
)

使用HQL语句中从一个实体到另一个实体的路径。有关详细信息,请参见有关HQL和连接Hibernate文档


32
什么是“路径”?我搜索了HQL文档,但未找到定义。
gwg 2015年

7
这意味着您需要链接实体:在上面的示例中,请注意他如何放置ug.user u。如果没有ug,则会出现错误。此外,“ ug.user u”中的“用户”应该是UserGroup类中字段的名称!
劳伦斯

6
这种HQL语法很烦人。我必须找到很多例子并找到了你的例子。
砰力丸

那么,如果没有使用Entity声明的显式映射(用于连接的字段),我是否无法“手动”连接实体?
安德森先生

67

您需要命名持有与用户的关联的实体。例如,

... INNER JOIN ug.user u ...

这是错误消息抱怨的“路径”,即从UserGroup到User实体的路径。

Hibernate依赖于声明性JOIN,在映射元数据中声明了联接条件。这就是为什么没有路径就无法构造本机SQL查询的原因。


13
终于有人回答了问题的根源...(需要用现有别名为外部表添加前缀)解决了我的问题,非常感谢!
萨德·本布兹

6
如果发生以下情况,该怎么办:您没有在Entity中建立关联,而只是保存了诸如“ Long userId;”之类的东西。
Spektakulatius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.