我一直在尝试此查询的变体,似乎无法实现这一点。我也引用了这篇文章:Path Expected for Join! Nhibernate Error并且似乎无法将相同的逻辑应用于我的查询。我的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"
)
答案 0 :(得分:119)
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语句中使用路径,从一个实体到另一个实体。有关详细信息,请参阅Hibernate documentation on HQL and joins。
答案 1 :(得分:55)
您需要将保存关联的实体命名为User。例如,
... INNER JOIN ug.user u ...
这是错误消息抱怨的“路径” - 从UserGroup到User实体的路径。
Hibernate依赖于声明性JOIN,在映射元数据中为其声明了连接条件。这就是为什么在没有路径的情况下构造本机SQL查询是不可能的。