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.

如果我删除addOrder-call,这个错误就会消失。我应该如何添加订单语句以便主查询知道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自定义查询与服务生成器一起使用。

于 2012-07-19T12:38:36.403 回答
0

您不能使用动态查询,因为 JournalArticle 实体没有直接引用 AssetEntry 实体。

一种可能性是从 AssetEntry 表(基本上是您的 dq0)中检索文章的有序 ID,然后执行另一个查询并以编程方式进行排序(您有排序的 ID)。

最后我认为这条线

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

不做你认为它做的事。resoucePrimKey 是对资源表的权限引用。您需要使用 id 列。

于 2012-07-20T16:19:54.437 回答