HQL错误:加入的预期路径

Web*_*net 93 java spring-mvc

我一直在尝试这个查询的变体,似乎无法实现这一点.我也引用了这篇文章:加入的路径预期!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"
)
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 121

select u from UserGroup ug inner join ug.user u 
where ug.group_id = :groupId 
order by u.lastname
Run Code Online (Sandbox Code Playgroud)

作为命名查询:

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

在HQL语句中使用路径,从一个实体到另一个实体.有关详细信息,请参阅有关HQL和联接Hibernate文档.

  • 什么是"路径"?我搜索了HQL文档,但没有找到定义. (30认同)
  • 这意味着你需要链接实体:在上面的例子中,注意他是如何放置ug.user u的.如果没有它之前的ug,你就会得到错误.而且,'ug.user u'中的'user'应该是Class UserGroup中字段的名称! (6认同)
  • 这个HQL语法很烦人.我必须找到很多例子并找到你的例子. (6认同)

Mar*_*nik 60

您需要将保存关联的实体命名为User.例如,

... INNER JOIN ug.user u ...
Run Code Online (Sandbox Code Playgroud)

这是错误消息抱怨的"路径" - 从UserGroup到User实体的路径.

Hibernate依赖于声明性JOIN,其中连接条件在映射元数据中声明.这就是为什么在没有路径的情况下构造本机SQL查询是不可能的.

  • 最后,有人回答问题的根源...(需要使用现有别名为外表添加前缀)解决了我的问题,非常感谢! (11认同)
  • 如果:您没有在实体中建立关联并且只保存了诸如"Long userId"之类的内容,该怎么办? (5认同)