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


100

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

답변:


131
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 문서 를 참조하십시오.


32
"경로"란 무엇입니까? HQL 문서를 검색했지만 정의를 찾지 못했습니다.
gwg

7
이는 엔티티를 연결해야 함을 의미합니다. 위의 예제에서 그가 ug.user u를 어떻게 넣는 지 주목하십시오. ug가 없으면 오류가 발생합니다. 또한 'ug.user u'의 'user'는 Class UserGroup의 필드 이름이어야합니다!
Lawrence

6
이 HQL 구문은 성가시다. 나는 많은 예제를 찾아야했고 당신의 것을 찾았습니다.
Bằng Rikimaru

그러면 엔티티와 함께 ​​선언 된 명시 적 매핑 (결합에 사용할 필드)없이 엔티티를 "수동으로"결합 할 수 없습니까?
Mr. Anderson

67

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

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

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

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


13
마지막으로 문제의 근원에 대답하는 누군가 ... (기존 별칭으로 외부 테이블을 접두사로 지정할 필요가 있음) 내 문제를 해결했습니다. 감사합니다!
Saad Benbouzid

6
만약 당신이 엔티티에서 연관을 만들지 않았고 그냥 'Long userId;'와 같은 것을 저장했다면?
Spektakulatius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.