HQL 错误: 预期连接的路径

我一直在尝试这个查询的变体,但似乎无法实现这一点。我还引用了这篇文章: 期望加入的路径! 冬眠错误,但似乎不能将同样的逻辑应用于我的查询。我的 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"
)
178062 次浏览

You need to name the entity that holds the association to User. For example,

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

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

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

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 语句中使用从一个实体到另一个实体的路径。

You'll be better off using where clauses. Hibernate does not accept inner joins for tables where the PK/FK relationship is not there between Entities

do

SELECT s.first_name, s.surname, sd.telephone_number FROM Student s, StudentDetails sd WHERE s.id = sd.student_id

而不是

SELECT s.first_name, s.surname, sd.telephone_number FROM Student s INNER JOIN StudentDetails sd on s.id = sd.student_id

后者只有在 Student 的 id (s.id)被引用为 StudentDetails (sd.Student _ id)表 design/erd 上的 FK 时才能工作