2010-02-24 4 views
0

관련 엔터티의 속성으로 결과를 그룹화해야하는 기준을 작성 중입니다. 별칭을 사용해 보았습니다. 속성 경로 자체를 사용하여 시도했지만 지금까지는 아무 것도 얻지 못했습니다. 은 (밑그림) 내 수업은 말한다 :기준에있는 관련 엔티티의 속성별로 그룹화하려면 어떻게합니까?

class A{ 
@ManyToOne(...) 
B b; 
} 
class B{ 
@OneToOne(...) 
C c; 
} 
class C{ 
String s; 
} 

와 나는 각각의 고유 한 문자열의 C.에서

내 최초의 시도였다에 대한 A의 및 B의 양을 반환하는 기준 원하는 :

session.createCriteria(A.class) 
    .setProjection(Projections.projectionList() 
    .add(Projections.groupProperty("b.c.s"), "string") 
    .add(Projections.countDistinct("b"), "b's") 
    .add(Projections.rowCount(), "a's")) 

이 BCS만큼 도움이되지 않았다 내가

시도 후

A의 속성 아니다

session.createCriteria(A.class) 
    .createAlias("b.c", "al") 
    .setProjection(Projections.projectionList() 
    .add(Projections.groupProperty("al.s"), "string") 
    .add(Projections.countDistinct("b"), "b's") 
    .add(Projections.rowCount(), "a's")) 

이것은 사실 SQL로 변환되었지만 쿼리에 조인을 포함하지 않았으므로 멀리 가지 않았습니다.

나는 여기 뭔가 잘못하고있는 것처럼 보입니다.

기준 API를 사용하여 이러한 종류의 효율적인 쿼리를 얻을 수 있습니까? 이 같은

답변

0

아마 뭔가 :

sess.createCriteria(A.class) 
    .createCriteria("b") 
    .createCriteria("c") 
    .setProjection(Projections.projectionList() 
    .add(Projections.groupProperty("s"), "string") 
    .list() 
    .size() 

난 당신이 바로, 그것이 내가 세 가지 CRITERIAS을 만들어야 의미를 두 번 createCriteria()

+0

보면 생각합니다? –

+0

예, 저는이 시간의 대부분을 2 번 사용하지만 3 번 함께하면 동일하게 작동합니다. 위의 코드를 확인하지 못했지만 시도해 볼 수 있습니다. – Michel

+0

내 말은, 같은 기준에서 A와 B를 셀 수는 없다는 뜻입니까? (대답 10 배, btw) –

관련 문제