Spring MVC HQL错误:连接需要路径

ippsafx7  于 2023-10-24  发布在  Spring
关注(0)|答案(3)|浏览(170)

我一直在尝试这个查询的变体,似乎无法实现这一点。我也引用了这篇文章: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"
)
ibrsph3r

ibrsph3r1#

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文档中的HQL和joins。

5n0oy7gb

5n0oy7gb2#

您需要将持有关联的实体命名为User。例如,

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

这就是错误消息所抱怨的“路径”--从UserGroup到User实体的路径。
Hibernate依赖于声明式JOIN,其连接条件在Map元数据中声明。这就是为什么不可能在没有路径的情况下构造原生SQL查询。

hs1rzwqc

hs1rzwqc3#

如果实体之间没有PK/FK关系,那么Hibernate不接受表的内部连接

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时才有效

相关问题