2016-05-22 5 views
3

Я передаю массив длинных значений и пытается получить соответствующие записи. Но он бросает ошибку. Позиционный параметр не задан.Ошибка при извлечении записей с использованием пользовательского запроса в Liferay

Вот код

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

[Этот вопрос] (http://stackoverflow.com/questions/10816676/liferay-custom-sql-using-in-operator), кажется, отношение к вашей проблеме. –

+0

@TimBiegeleisen: она передает строку в качестве параметра, пока я передаю массив Long. Решение не является правильным. QueryPos предоставляет API для передачи значений массива в качестве параметра в sql-запросе. Я получил ссылку из этой ссылки http://chingovan.blogspot.in/2016/01/liferay-custom-dynamic-query-with-array.html –

+0

Вам нужно преобразовать ваш массив в CSV (значения, разделенные запятыми). –

ответ

0

Вместо этого я рекомендую проанализировать ваш запрос API DinamycQuery. Это имеет много преимуществ, так как вам не нужно управлять жизненным циклом сеанса и что вы напрямую обходите список объектов модели 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); 
+0

yes Динамический запрос помогает решить эту проблему, но проект требует использования пользовательского SQL-запроса. –