2011-01-05 2 views
2

테이블이 있습니다.이 테이블을 AAA라고 부르 자요, BBB가 할당 된 추가 테이블에 일대 다 정의가 있습니다. 그것은 그런 일 같습니다기본 레코드의 목록 기반 레코드 액세스

public class AAA 
{ 
... 
    @OneToMany(orphanRemoval=true, fetch=FetchType.LAZY, mappedBy="aaa") 
    private List<BBB> bbbs; 
... 
} 

나는 나에게 하나 이상의 BBBs있는 모든 AAAS을 줄 것이다 JPA 쿼리를 실행하려면를, 그래서 SIZE(aaa.bbbs)을 사용했다. 그러나 결과 집합은 각 aaa의 첫 번째 bbb의 타임 스탬프에 따라 정렬되기를 원합니다.

실제 예 : 나는 각자 자신의 프로필에 추가 한 최신 사진으로 주문한 내 모든 Facebook 친구를 얻고 싶습니다. 이 경우 AAA는 "친구"이고 BBB는 "그림"이 될 것이며 Picture.CreatedTimestamp로 친구를 주문하고 싶습니다.

기본적으로 각 aaa에 대한 bbbs의 첫 번째 항목에 액세스해야하며 순서대로 정렬해야합니다. 목표를 달성하기 위해해야 ​​할 일은 무엇입니까? 최신 타임 스탬프를 찾기 위해 하나의 크기를 결정하고 다른 - 당신은 최대 절전 모드를 사용하는 경우

답변

1

그래서, 당신은 bbbs 이상이 집계가 필요 필터 (@filter 및 @FilterDef)를 사용할 수 있습니다. JOINGROUP BY으로 표현할 수 있습니다.

+0

구문에 대해 확실합니까? "GROUP BY"는 JPA에서 작동하지 않습니다. MySQL에서는 PostgreSQL을 사용하고 있으며 일반적인 JPA 솔루션을 찾고 있습니다. –

+0

@Eldad : 'GROUP BY'는 JPA에서 작동합니다. 완벽하게 유효한 JPA 쿼리입니다. – axtavt

+0

JPA 문서를 더 자세히 살펴보면, 당신이 옳은 것처럼 보이지만 실제로는 작동하지 않을 것입니다 (나는 Hibernate를 사용하고 있습니다). 귀하의 쿼리를 사용하려고 할 때 예외가 있습니다 : "오류 : 열"aaa.some_aaa_column "GROUP BY 절에 나타나야합니다 또는 집계 함수에서"사용해야합니다. –