2017-10-16 11 views
0

Hibernate에서 where 절에 하위 쿼리를 사용하여 쿼리를 생성하도록하려고 시도했습니다. 나는 used this answer as a base to help me going을 가졌지 만이 질문은 하나의 테이블 만 언급했습니다.WHERE 절과 여러 조인에서 서브 쿼리를 사용하는 Hibernate 쿼리

그러나, 이것은 내가 (SQL에서) 필요가 무엇 : 내부 제약에서 탐색하는 동안 이러한 내부를 지정

나는 매우 최대 절전 모드를 사용하여 사용하고 있지 않다으로
SELECT [...] 
FROM a 
LEFT OUTER JOIN b on a.idb = b.idb 
LEFT OUTER JOIN c on b.idc = c.idc 
[...] 
LEFT OUTER JOIN k out on j.idk = k.idk 
WHERE k.date = (SELECT max(date) from k in where in.idk = out.idk) OR k.date is null 

, 나는 데 문제가 합류했다. 링크 된 답변에서와 같이 초기 기준을 다시 만들 수 있었지만 기준 및 rootCriteria에 가입하지 못했습니다.

답변

0

엔티티가 @ManyToOne 주석으로 올바르게 결합 된 경우 이전 기준에 조건을 추가하기 만하면 조건이 전체 쿼리에 전파됩니다.

다음 코드는 내가 찾고있는 WHERE 절을 추가하는 데 제대로 작동하는 것 같습니다.

DetachedCriteria kSubquery = DetachedCriteria.forClass(TableJPE.class,"j2"); 
kSubQuery = kSubQuery.createAlias("k","k2"); 
kSubQuery.setProjection(Projections.max("k2.date")); 
kSubQuery = kSubQuery.add(Restrictions.eqProperty("j.id", "j2.id")); 
rootCriteria.add(Restrictions.disjunction() 
    .add(Subqueries.propertyEq("k.date",kSubQuery)) 
    .add(Restrictions.isNull("k.date")));