2017-05-15 4 views
1

나는 다음과 같은 쿼리를 구현하기 위해 노력하고있어 : 최대 절전 모드 기준 API와Hibernate Criteria API로 조인 된 테이블에서 distinct table을 선택하는 방법?

SELECT DISTINCT C.* FROM A 
join B on A.some_id = B.some_id 
join C on B.some_id = C.some_id; 

. C 테이블에 대한 고유 한 결과가 필요합니다. 일부 열만이 아닙니다.

나는 그렇게하려고 노력 :

Criteria criteria = createCriteria(C.class, "ct") 
       .createCriteria("B", "bt") 
       .createCriteria("A", "at") 
       .//Some restrictions which are applied to all tables 

그리고 그렇게 :

Criteria criteria = createCriteria(A.class, "at") 
       .createCriteria("B", "bt") 
       .createCriteria("C", "ct") 
       .//Some restrictions which are applied to all tables 

(나는 비록 차이를 볼 수 없습니다). 광고의 ResultTransformer에 시도 :

criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

다음 ProjectionsList에 모든 colums를 넣어 시도하고 :

criteria.setProjection(Projections.distinct(projectionList)); 

는하지만 투사은 전체 테이블에 목록의 첫 번째 열에에 "별개"키워드를 추가하지만. - 내가 무엇을 달성하고자하는

은 같은 것입니다 :

criteria.setProjection(Projections.distinct("C.*")); 

하지만 난 단지 쿼리에서 같은 와일드 카드를 사용할 수 없습니다, 여기에 열을 추가 할 수 있습니다.

도움을 주시면 대단히 감사하겠습니다.

+0

미안 해요, 난 제공된 코드에서 실수가 있었다, 나는 C 테이블에서 서로 다른 결과가 필요합니다. –

+0

왜 다른 테이블에 가입하고 계십니까? 다른 테이블에 대한 참조 만 제거하면됩니다. –

+0

모든 테이블에 일부 제한 사항을 적용해야하기 때문입니다. –

답변

0

테이블 'C'의 열을 아래 'A'가 아닌 테이블에서 선택해야합니다.

SELECT distinct (*) FROM C 

다음과 같이 최대 절전 모드 기준으로 작성 할 수 있습니다

Criteria criteria = session.createCriteria(C.class); 
criteria = criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
ResultTransformer rt = new DistinctRootEntityResultTransformer(); 
List list = rt.transformList(criteria.list()); 
+0

Hibernate Criteria API를 써야합니다. –

+0

표 C에서 필요한 열만 필요하고 표 A 또는 표 B에서는 필요하지 않습니까? – VNT

+0

네, 그렇습니다. 테이블 수준에서는 별개의 것이 필요합니다. –