HQL 错误:预期的加入路径

2022-08-31 09:25:37

我一直在尝试此查询的变体,似乎无法实现这一点。我还引用了这篇文章:加入的路径!Nhibernate Error,似乎无法将相同的逻辑应用于我的查询。我的对象有一个集合。UserUserGroup

我知道查询需要引用对象中的实体,但从我所看到的来看,我是...

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

答案 1
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 和联接的休眠文档


答案 2

您需要命名与 User 保持关联的实体。例如

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

这是错误消息所抱怨的“路径” - 从用户组到用户实体的路径。

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


推荐