2014-07-11 2 views
0

나는 쿼리 두 개의 테이블이 있고, 지금까지 나는 다음과 같은 HQL 쿼리와 함께 왔어요 : 나는 두 테이블을 조회하고있어최대 절전 기준을 사용하여 단일 쿼리에서 여러 테이블에 액세스하는 방법?

From DriverEntity d 
where exists (
    From LicenceEntity l 
    where driverId = d.Id 
     and l.licenceType.id = '3' 
     and l.validFrom > TO_DATE('2014-01-01', 'YYYY-MM-DD') 
     and l.validFrom < TO_DATE('2014-04-17', 'YYYY-MM-DD') 
     and l.validTo > TO_DATE('2014-07-02', 'YYYY-MM-DD') 
     and l.validTo < TO_DATE('2095-07-12', 'YYYY-MM-DD'))) 

; 하나는 라이센스가 있고 다른 하나는 운전사가 있습니다. 각 드라이버에는 많은 라이센스가있을 수 있습니다.

쿼리가 완벽하게 작동하지만 더 많은 검색 옵션을 추가 할 때 쉽게 편집 할 수 있도록 조건을 대신 사용하고 싶습니다.

기준을 사용하여이 쿼리를 어떻게 보이나요? DetachedCriteria를 살펴 봤지만 완전히 이해하지 못합니다.

+0

무엇을 시도 했습니까? StackOverflow는 뭔가를 시도하고 문제가있는 특정 질문을하기위한 사이트입니다. 일반 "어떻게해야합니까?"시도가없는 질문은 나쁜 시간을 갖는 경향이 있고 어느 정도는 그렇습니다. 문제가있는 경우 무언가를 시도한 다음 특정 질문을하십시오. – Avery

+0

왜, 기준을 사용해야합니까? 내 개인적인 경험으로 인해 단편화가 발생했습니다 ... anytime = 이상으로 HQL을 사용합니다.) – corsiKa

+0

제한 사항을 많이 추가 할 예정이므로 Criteria를 사용하고 싶습니다. HQL 쿼리는 매우 복잡합니다. 동안. – trifri

답변

0

당신이 DetachedCriteria의 도움으로 서브 쿼리를 추가 할 수 있습니다

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
Criteria criteria = Criteria.forClass(DriverEntity.class,"driver"); 
DetachedCriteria dc = DetachedCriteria.forClass(LicenceEntity.class,"licence"); 
dc.add(Property.forName("driver.id").eqProperty("licence.driverId")); 
dc.add(Restrictions.between("validFrom", df.parse("2014-01-01"), df.parse("2014-04-17"))); 
dc.add(Restrictions.between("validTo", df.parse("2014-07-02"), df.parse("2095-07-12"))); 

criteria.add(Subqueries.exists(dc.setProjection(Projections.id()))); 
0

당신은 Restrictions 사용할 수 있습니다

criteria.add(Restrictions.between("dateField", fromDate, toDate)); 

를 쿼리의 경우 :

vFd1,2 및 vTd1,2는 설정 시간에 자바 달력 날짜

criteria.add(Restrictions.between("validFrom", vFd1, vFd2)); 
criteria.add(Restrictions.between("validTo", vTd1, vTd2)); 

할 위치 제로.

참조 :

https://stackoverflow.com/a/10074111/3603806

관련 문제