SQL에서와 같이 select에 수동으로 테이블 b에 대한 액세스를 수동으로 추가해야합니다. SQL에서 당신은 위해 할 수있는
select a.key, a.col2, a.col3, ... from a, b
where a.key = b.foreignKeyFromA
group by a.key, a.col2, a.col3, ...
order by sum(b.rank);
하면, 한 개의 HQL 문에 수동으로
select new A(a.key, a.col2, a.col3, ...) from A a join B b
group by a.key, a.col2, a.col3, ...
order by sum(b.rank)
이 (당신은 피팅 생성자가 필요 같은 것을 그것을 구현해야하므로 최대 절전 모드가 자동으로 B이 액세스를 생성하지 않습니다 A와 B는 하나의 값으로 배열을 반환 할 수 있습니다. 매핑에 A와 B의 관계를 정의해야합니다.)
참고 : group by 절에서 다음을 수행해야합니다. 비록 당신이 선택하는 모든 열을 언급한다. ey은 더 이상 그룹화를 변경하지 않습니다 (키는 이미 고유합니다). 선택한 모든 열을 언급하지 않으면 Oracle 데이터베이스에서 오류가 발생합니다. MySQL은 이것을 필요로하지 않으며, group by a.key
이면 충분하지만, 원칙적으로 모든 데이터베이스에서 작동하는 HQL 문을 작성해야합니다.
매우 효과적이지 않습니다. A와 B가 매핑됩니다. 클래스 A 정의 : 그래서 나는 a와 b 사이의 관계를 매핑하는 별도의 테이블 (a_b)을 가지고 있습니다. 새 A()를 선택해야합니까? A에서 선택 *을 사용할 수 있습니까? 지금까지 많은 제안에 감사드립니다. –
Nes
아, 내 데이터베이스가 MySQL이라고 언급하는 것을 잊어 버렸습니다. – Nes
새로운 A (a.key, a.col2, ...)를 선택하면 A의 인스턴스 목록을 얻습니다.'a.key, col2, ... '를 선택하면 객체의 배열의리스트 두 가지 모두 가능합니다. 내 코드가 더 좋은 예입니다. 그러나 당신은 HQL에서'A *'를 선택할 수 없으며 (적어도 Oracle에서는) 그룹과 함께 작동하지 않을 것입니다. - "잘 작동하지 않는다"는 것은 무엇을 의미합니까? 정확히 작동하지 않는 것은 무엇입니까 (오류 메시지 또는 가짜 결과)? - 너 정말 많은 관계가 있니?귀하의 예에서는 일대 다 (one-to-many) 일 수도있어서 다루기가 더 쉽습니다. – Johanna