我在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
- 调用,则此错误消失。我应该如何添加order语句,以便主查询知道asset.viewCount
?
答案 0 :(得分:1)
AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setClassName(JournalArticle.class.getName());
assetEntryQuery.setXXX //adding criterions
assetEntryQuery.setOrderByCol1("viewCount");
List<AssetEntry> assetEntries = AssetEntryServiceUtil.getEntries(assetEntryQuery);
答案 1 :(得分:0)
我担心没有直接的方法可以使用DynamicQuery
API。
我认为您需要使用Service builder Finders
,即Custom Query与服务构建器。
答案 2 :(得分:0)
您无法使用动态查询,因为没有从JournalArticle实体直接引用到AssetEntry实体。
一种可能性是从AssetEntry表中检索有序的文章ID(基本上是你的dq0),然后再做另一个查询并以编程方式进行排序(你已经订购了id)。
最后我认为这一行
query.add(PropertyFactoryUtil.forName("articleParent.resourcePrimKey").in(dq0))
不符合您的想法。 resoucePrimKey是对资源表的权限引用。您需要使用id列。