[java] HQL 오류 : 결합에 필요한 경로

이 쿼리의 변형을 계속 시도하고 있는데 이런 일이 발생하지 않는 것 같습니다. 나는 또한이 게시물을 참조했다 : Path Expected for Join! 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"
)



답변

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 및 조인에 대한 Hibernate 문서 를 참조하십시오.


답변

User에 대한 연결을 보유하는 엔티티의 이름을 지정해야합니다. 예를 들면

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

이것이 오류 메시지가 불평하는 “경로”입니다. UserGroup에서 User 엔티티로의 경로입니다.

Hibernate는 선언적 JOIN에 의존하며, 이에 대한 결합 조건은 매핑 메타 데이터에서 선언됩니다. 이것이 경로없이 네이티브 SQL 쿼리를 구성하는 것이 불가능한 이유입니다.


답변