0

Liferay 6 で動的クエリを作成しているときに問題が発生しJournalArticlesましたview count。閲覧回数は別表(AssetEntry)で指定します。

私はこれで立ち往生しています:

DynamicQuery query = DynamicQueryFactoryUtil.forClass(
JournalArticle.class, "articleParent", PortalClassLoaderUtil.getClassLoader());

//adding criterions
query.add(...);

DynamicQuery dq0 = DynamicQueryFactoryUtil.forClass(AssetEntry.class, "asset", 
PortalClassLoaderUtil.getClassLoader())
.setProjection(ProjectionFactoryUtil.property("asset.classPK"))
.add(PropertyFactoryUtil.forName("asset.companyId")
.eqProperty("articleParent.companyId"))
.add(PropertyFactoryUtil.forName("asset.groupId")
.eqProperty("articleParent.groupId"));

query.add(PropertyFactoryUtil.forName("articleParent.resourcePrimKey").in(dq0))
            .addOrder(OrderFactoryUtil.desc("asset.viewCount"));

これで、次のようなエラー メッセージが表示されますcould not resolve property: asset of: com.liferay.portlet.journal.model.impl.JournalArticleImpl

-callを削除するとaddOrder、このエラーは消えます。メインクエリが認識できるように、注文ステートメントを追加するにはどうすればよいasset.viewCountですか?

4

3 に答える 3

1
AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setClassName(JournalArticle.class.getName());
assetEntryQuery.setXXX //adding criterions
assetEntryQuery.setOrderByCol1("viewCount");
List<AssetEntry> assetEntries = AssetEntryServiceUtil.getEntries(assetEntryQuery);
于 2012-07-19T13:44:15.963 に答える
0

DynamicQueryAPIを使用してこれを行う直接的な方法はありません。

Service builder Findersつまり、ServiceBuilderでカスタムクエリを使用する必要があると思います。

于 2012-07-19T12:38:36.403 に答える
0

JournalArticle エンティティから AssetEntry エンティティへの直接参照がないため、動的クエリを使用できません。

1 つの可能性は、AssetEntry テーブル (基本的には dq0) から記事の順序付けされた ID を取得し、別のクエリを実行してプログラムで並べ替えを行うことです (ID を順序付けます)。

最後に、この行だと思います

query.add(PropertyFactoryUtil.forName("articleParent.resourcePrimKey").in(dq0))

あなたが思っていることをしません。resoucePrimKey は、アクセス許可のリソース テーブルへの参照です。id 列を使用する必要があります。

于 2012-07-20T16:19:54.437 に答える