2012-10-30 3 views
3

예를 들어 A와 B 사이에 many-to-many 연관이 있습니다. 그리고 최대 절전 모드에서 부모 엔티티 [many-to-many]가없는 정렬 된 자식을 어떻게 얻을 수 있습니까?

A.bs is sorted List<B> that sorted by an index-column in the middle-table: idx
idx 열 클래스 필드로

이제 우리는 B의 목록을 개별적으로 쿼리하려고하며 주 조건은 A의 ID입니다. 하지만 쿼리 B를 직접 실행하면 정렬되지 않은 목록이 표시됩니다 (idx 필드로 정렬하지 마십시오).

처음에는 A를 검색 한 다음 B를 목록으로 수집 할 수 있습니다. 그러나 프레임 워크를 고려하면 수동 코딩없이 목록을 반환해야합니다 (프레임 워크에 대해 너무 많이 설명하고 싶지는 않습니다. 한 마디로,이 제한은 페이지 생성 도구가 우리 자체로 캡슐화되어 있기 때문에 발생합니다 , 나는 그것을 수정하고 싶지 않다.).

HQL/Criteria를 통해이 문제를 해결할 수있는 방법이 있습니까? 기준이 바람직합니다.

답변

1

오케이. 이 문제가 해결되었습니다. hql에서 index() 함수를 사용하면 올바른 결과를 얻을 수 있습니다.

select b from A a left join a.bs b where a.id = ? order by index(b)

index()의 제한은 자식을 hql에서 parent로 이동해야하거나 예외를 throw해야한다는 것입니다. "b (b) 인덱스에서 b 선택"과 같은 hql이 불법임을 의미합니다. 또한이 연결 탐색에서 "가져 오기"를 사용하지 마십시오 (이 질문과 관련이있는 것은 아닙니다).

이 문제에 당황한 사람에게 유용하길 바랍니다.

관련 문제