2012-08-02 5 views
0

SQL 쿼리 (2 개 변형)가 있으며 동적 쿼리와 함께 사용해야합니다. (서브 쿼리를 통해 변형 1 //) SQL에서조인 또는 하위 쿼리를 사용하여 SQL 쿼리를 동적 쿼리로 변환

그렇게 보이는 :

SELECT AssetEntry.entryId , (
       SELECT COUNT(*) 
       FROM `MBMessage` 
       WHERE classPK = AssetEntry.classPK 
      ) AS comments 
      FROM `AssetEntry` 
      ORDER BY comments DESC 

또는 가입 및 그룹과 다른 쿼리 SQL 쿼리는 정확히 같은 표시

SELECT AssetEntry.entryId, count(MBMessage.classPK) 
FROM `AssetEntry` 
JOIN MBMessage ON (AssetEntry.classPK = MBMessage.classPK) 
GROUP BY MBMessage.classPK 

을 모두!

이제 동적 쿼리로 그 중 하나를 사용해야합니다. 조인하는 방법을 모르고 프로젝션에서 하위 쿼리를 수행하는 방법을 모릅니다.

아무도 도와 줄 수 있습니까? THX


custom-sql에서이 작업을 수행해야했습니다.

+0

해결 했습니까? 나는 비슷한 질문을한다. – Mark

답변

0

귀하의 요구 사항은 SELECT 명세서에 집계 기능이 필요한 정말 구체적인 경우입니다.

DynamicQuery 대신에 사용자의 경우 찾기를 사용하여 Custom query (일명 평생 custom-sql)을 사용하는 것이 좋습니다.

하게 DynamicQuery API는 한계를 가지고 있으며, 여러분의 경우에 작동하지 않습니다 (경험에서 말하기 을, 그래서 다른 사람이 아래 지점에 대한 다른 의견이나 사실이 있다면 나는을 알고 행복보다 더 많은 것) :

  1. DynamicQuery에서는 조인을 사용할 수 없습니다.
  2. count을 반환하거나 Projection을 사용하여 개별 열 값을 반환 할 수는 있지만 열을 반환하고 투영법을 사용하여 집계 집계를 수행 할 수는 없습니다.
  3. 투영법을 사용하여 DynamicQuery에서 하위 쿼리를 사용할 수 있지만 select 문에서 하위 쿼리를 DynamicQuery와 함께 사용할 수 있다고 생각하지 않습니다.
0

AssetEntryQuery를 사용하면 다른 방법이 있습니다.

AssetEntryQuery aeq = new AssetEntryQuery(); 
aeq.setClassName(MBMessage.class.getName()); 
aeq.set.... (Add any other criterions if you want to) 
List<AssetEntry> assetEntries = AssetEntryServiceUtil.getEntries(aeq); 
+0

이것이 어떻게 내 문제를 해결할 수 있을지 모르겠다. – appsthatmatter