0

SQL クエリ (2 つのバリアント) があり、動的クエリで使用する必要があります。

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 クエリもまったく同じように表示されます。

ここで、そのうちの 1 つを動的クエリとして使用する必要があります。結合を行う方法がわかりませんし、プロジェクションでサブクエリを行う方法もわかりません?!

誰でも私を助けることができますか?THX


custom-sql でこれを行う必要がありました。

4

2 に答える 2

0

あなたの要件は、SELECTステートメントに集約関数が必要な、本当に特殊なケースです。

あなたのケースcustom-sqlでは、DynamicQuery.

DynamicQuery APIには制限があり、あなたのケースでは機能しません(経験から言えば、他の誰かが以下の点に関して他の意見や事実を持っているなら、私は喜んで知りたいです):

  1. DynamicQuery では結合できません。
  2. を返すcountか、個々の列の値をProjection返すことはできますが、射影を使用して収集する列とカウントを返すことはできません。
  3. プロジェクションを使用して DynamicQuery でサブクエリを使用できますが、DynamicQuery を使用したselectステートメントでサブクエリを使用できないと思います。
于 2012-08-02T11:39:33.067 に答える
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);
于 2012-08-02T15:58:35.777 に答える