Java 使用Liferay'按另一个表订购;s动态查询
在Liferay 6中进行动态查询时遇到问题。我正试图根据Java 使用Liferay'按另一个表订购;s动态查询,java,liferay,liferay-6,dynamicquery,Java,Liferay,Liferay 6,Dynamicquery,在Liferay 6中进行动态查询时遇到问题。我正试图根据视图计数对日志文章进行查询。视图计数在另一个表(asseentry)中指定 我被这件事困住了: DynamicQuery query = DynamicQueryFactoryUtil.forClass( JournalArticle.class, "articleParent", PortalClassLoaderUtil.getClassLoader()); //adding criterions query.add(...);
视图计数对日志文章
进行查询。视图计数在另一个表(asseentry
)中指定
我被这件事困住了:
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"));
这样,我会收到一条错误消息,说:无法解析属性:asset of:com.liferay.portlet.journal.model.impl.JournalArticleImpl
如果删除addOrder
-调用,此错误将消失。我应该如何添加order语句,以便主查询知道asset.viewCount
?恐怕没有直接的方法使用DynamicQuery
API来实现这一点
我认为您需要使用,即与Service builder一起使用。AssetEntryQuery AssetEntryQuery=new AssetEntryQuery();
AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setClassName(JournalArticle.class.getName());
assetEntryQuery.setXXX //adding criterions
assetEntryQuery.setOrderByCol1("viewCount");
List<AssetEntry> assetEntries = AssetEntryServiceUtil.getEntries(assetEntryQuery);
assetEntryQuery.setClassName(JournalArticle.class.getName());
assetEntryQuery.setXXX//添加标准
setOrderByCol1(“视图计数”);
列出assetEntries=AssetEntryServiceUtil.getEntries(assetEntryQuery);
您不能使用动态查询,因为JournalArticle实体与AssetEntry实体之间没有直接引用
一种可能是从AssetEntry表中检索物品的有序ID(基本上是dq0),然后执行另一个查询并通过编程进行排序(您已对ID进行排序)
最后我觉得这一行
query.add(PropertyFactoryUtil.forName("articleParent.resourcePrimKey").in(dq0))
不会做你认为它会做的事。ResourcePrimKey是对资源表的权限引用。您需要使用id列。我认为这并不能回答问题:您使用//添加标准查询错过了第一个查询
,则您的方式返回问题通过第二次查询dq0
已经返回的asseentry
。您计划如何返回日志文章
s以及日志文章
中指定的附加标准,而不是AssetQuery
中指定的附加标准?可能有“n”个标准,如用户名、标题、URL标题、描述、内容、版本等,AssetQuery
中可能没有这些标准。尽管大多数标准(如标题、说明、用户名)都已存在于AssetQuery
中。