在Liferay中使用自定义查询获取记录时出错

时间:2016-05-22 14:02:06

标签: mysql hibernate liferay liferay-6

我正在传递长值数组并尝试获取相关记录但是它正在抛出错误未定义位置参数

这是代码

    try {
            String list = CustomSQLUtil.get(id of the query);
            SQLQuery sqlQuery = session.createSQLQuery(list);
            sqlQuery.setCacheable(false);
            QueryPos q=QueryPos.getInstance(sqlQuery);
            q.add(array of long values);
            return processObjectListToEntityList(QueryUtil.list(sqlQuery, getDialect() ,QueryUtil.ALL_POS, QueryUtil.ALL_POS));
   } 
   catch(Exception e){
       log.error("Error while Fetching Records " + e);
   } finally{
        closeSession(session);
   }

查询

SELECT 
    entity1.name
FROM 
    entityOne as entity1 
JOIN 
    entityTwo as entity2 
WHERE
    entity1.id = entity2.id
AND
    entity2.id IN (?);

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议您将查询解析为DinamycQuery API。这有很多好处,因为您不必管理会话生命周期并直接获得Liferay模型对象列表。

一个例子是:

DynamicQuery dynamicQuery = DynamicQueryFactoryUtil.forClass(AssetCategory.class, PortalClassLoaderUtil.getClassLoader());
Property nameProperty = PropertyFactoryUtil.forName("name");
Property groupIdProperty = PropertyFactoryUtil.forName("groupId");
dynamicQuery.add(nameProperty.eq(name));
dynamicQuery.add(groupIdProperty.eq(groupId));
List<AssetCategory> categoriesByName = AssetCategoryLocalServiceUtil.dynamicQuery(dynamicQuery);