2011-02-08 3 views
0

다른 테이블의 값을 기반으로 결과를 정렬하는 상당히 복잡한 JPQL 문을 작성하려고합니다. MySQL이 어떻게 보이는지 알지만 JPQL로 전환하는 데 도움이 필요합니다. 다음은 동등한 SQL입니다.복잡한 JPQL ORDER 문

SELECT o.* FROM Observation o 
LEFT JOIN Obs_Event p 
ON p.Event_ID = o.Event_ID 
LEFT JOIN Event_Set ppp 
ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID 
WHERE o.Individual_ID = <some id> 
AND o.Observation_Date = <a date value> 
ORDER BY ppp.Seq_Num ASC 

이 작업을 수행하는 방법에 대한 도움이 필요하시면 크게 감사하겠습니다. 특히 나는이 부분에 문제가 보인다 :

ON ppp.Event_ID = o.Event_ID AND ppp.Event_Set_ID = o.Event_Set_ID 

그래서, 지금까지 내가 이것을 시도했다 :

 Query q= em.createQuery("select o " + 
       " from Observation as o " + 
       " join o.eventID p" + 
       " join p.eventSetCollection ppp " + 
       " where o.individualID = :indiv " + 
       " AND o.observationDate = :d " + 
       " AND o.eventID = ppp.event " + 
       ""; 

내가

WHERE ... 
AND o.eventSetID = ppp.eventSet 

같은 것을 추가하려고하면 ... 단순히 작동하지 않습니다. 생성 된 SQL을 보면 ppp.eventSet이 단순히 무시 된 것처럼 보입니다.

제안 사항?

+0

엔티티는 어떻게 매핑됩니까? – axtavt

답변

0

먼저, 포스터에서 내 엔터티 관계를 묻는 감사의 말을 전했습니다. 그 결과 저는 사물을 면밀히 관찰하고 무엇이 잘못되었는지 깨닫게되었습니다.

JPA가 나보다 훨씬 나빠졌을 때, 실제 개체 대신 레코드/개체의 기본 키처럼 실제 정수로 o.eventID 속성을 설정했습니다. . 따라서, 위의 JPQL에, 나는 실제로 다음과 같은 성명을 정수로 객체를 매핑하기 위해 노력하고있어 :

및 o.eventID = ppp.event

올바른 문이 밝혀 :

 Query q= em.createQuery("select o " + 
       " from Observation as o " + 
       " join o.eventID p" + 
       " join p.eventSetCollection ppp " + 
       " where o.individualID = :indiv " + 
       " AND o.observationDate = :d " + 
       " AND o.eventID= ppp.event.eventID" + 
       " order by ppp.seqNum ASC" + 
       ""); 

실제로는 Observation 클래스의 관계를 결국 개체로 변경해야하지만 핀치에서는 작동합니다.