2012-08-02 98 views
0

我有一個SQL查詢(2個變體),我需要在動態查詢中使用它。將SQL查詢轉換爲具有連接或子查詢的動態查詢

在SQL它看起來如此(變型1 //通過子查詢):

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

或用加入和組替代查詢:

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

兩個SQL查詢顯示一模一樣!

現在我需要使用其中的一個作爲動態查詢。我不知道如何做一個連接,我不知道如何在投影中做一個子查詢?!

任何人都可以幫助我嗎? THX


我必須用custom-sql來做到這一點。

+0

你已經解決了嗎?我有類似的問題。 – Mark 2012-08-20 14:01:25

回答

0

您的要求是一個非常具體的情況,它需要SELECT聲明中的聚合函數。

我建議在你的情況下使用Custom query(也稱爲custom-sql),而不是DynamicQuery

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 2012-08-07 13:33:03