2015-08-31 3 views
1

Hybris консоли:Flexiblesearch ошибка: пропущенные значения

ERROR [hybrisHTTP19] [FlexibleSearch] Flexiblesearch error: missing values for [emailId, productCode], got {13=8796135981138, issent=false, productcode =0100, emailid ='[email protected]'} 
ERROR [hybrisHTTP19] [FlexibleSearch] query was 'SELECT {p:pk} FROM {NotifyStock AS p} WHERE {p:status}=?isSent AND {p:productId}=?productCode AND {p:emailId}=?emailId ' 
ERROR [hybrisHTTP19] [FlexibleSearch] translated query was: SELECT item_t0.PK FROM notifystock item_t0 WHERE (item_t0.p_status =? AND item_t0.p_productid =? AND item_t0.p_emailid =?) AND (item_t0.TypePkString=?) 
Aug 31, 2015 6:51:35 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [DispatcherServlet] in context with path [/store] threw exception [Request processing failed; nested exception is de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException: missing values for [emailId, productCode], got {13=8796135981138, issent=false, productcode =0100, emailid ='[email protected]'}] with root cause 
de.hybris.platform.jalo.flexiblesearch.FlexibleSearchException: missing values for [emailId, productCode], got {13=8796135981138, issent=false, productcode =0100, emailid ='[email protected]'}[HY-0] 
     at de.hybris.platform.persistence.flexiblesearch.TranslatedQuery.removeUnusedValues(TranslatedQuery.java:274) 
     at de.hybris.platform.jalo.flexiblesearch.FlexibleSearch.search(FlexibleSearch.java:1423) 
     at de.hybris.platform.jalo.flexiblesearch.FlexibleSearch.search(FlexibleSearch.java:1627) 
     at de.hybris.platform.servicelayer.search.impl.DefaultFlexibleSearchService$2.execute(DefaultFlexibleSearchService.java:374) 
     at de.hybris.platform.servicelayer.search.impl.DefaultFlexibleSearchService$2.execute(DefaultFlexibleSearchService.java:1) 
     at de.hybris.platform.servicelayer.session.impl.DefaultSessionService.executeInLocalView(DefaultSessionService.java:88) 
     at de.hybris.platform.servicelayer.search.impl.DefaultFlexibleSearchService.getJaloResult(DefaultFlexibleSearchService.java:363) 
     at de.hybris.platform.servicelayer.search.impl.DefaultFlexibleSearchService.search(DefaultFlexibleSearchService.java:164) 
     at de.hybris.merchandise.core.notifystock.NotifyStockServices.isAlreadyExists(NotifyStockServices.java:118) 
     at de.hybris.merchandise.facades.NotifyStock.impl.NotifyStockFacadeImpl.isAlreadyExists(NotifyStockFacadeImpl.java:51) 
     at de.hybris.merchandise.storefront.controllers.misc.AddToCartController.verifyEmail(AddToCartController.java:132) 

Рабочая Запрос в HAC:

select {p:PK} From {NotifyStock AS p} WHERE {p:status}=0 AND {p:productId}=0100 AND {p:emailId}='[email protected]' 

Flexiblesearch запросов (не работает):

final StringBuilder builder = new StringBuilder(); 
     builder.append("SELECT {p:").append(ItemModel.PK).append("} "); 
     builder.append("FROM {").append(NotifyStockModel._TYPECODE).append(" AS p} "); 
     builder.append("WHERE ").append("{p:").append(NotifyStockModel.STATUS).append("}").append("=?isSent "); 
     builder.append("AND ").append("{p:").append(NotifyStockModel.PRODUCTID).append("}").append("=?productCode "); 
     builder.append("AND ").append("{p:").append(NotifyStockModel.EMAILID).append("}").append("=?emailId "); 



     final String email = "\'" + notifyStockModel.getEmailId() + "\'"; 
     final FlexibleSearchQuery query = new FlexibleSearchQuery(builder.toString()); 
     query.setNeedTotal(true); 
     query.addQueryParameter("isSent", Boolean.FALSE); 
     query.addQueryParameter("productCode ", notifyStockModel.getProductId()); 
     query.addQueryParameter("emailId ", email); 

Когда я Увольте выше запроса в HAC запрос работает нормально, но когда я произвел один и тот же запрос, используя гибкий поиск, я получаю исключение flexiblesarch. n кто-нибудь скажет мне, что такое ошибка в моем гибком поисковом запросе? Любая помощь будет оценена?

ответ

1

Я думаю, что вы предоставляете дополнительное пространство при добавлении параметра запроса для productCode и emailId в FlexibleSearchQuery. Вот почему вы получаете отсутствующие значения для ошибки [emailId, productCode].

Заменить этот

query.addQueryParameter("productCode ", notifyStockModel.getProductId()); // extra space after productCode 
query.addQueryParameter("emailId ", email); // extra space after emailId 

с

query.addQueryParameter("productCode", notifyStockModel.getProductId()); 
query.addQueryParameter("emailId", email); 

Надеется, что это будет исправить вашу проблему.

0

Добавляя к тому, на что ответил Shresht, всегда делайте привычкой использовать константы имени поля в карте параметров.

Пример:

query.addQueryParameter (NotifyStockModel.PRODUCTID, notifyStockModel.getProductId()); query.addQueryParameter (NotifyStockModel.EMAILID, email);

Вышеупомянутый синтаксис никогда не приведет к проблемам. Кроме того, для таких прямых запросов согласующих, я предлагаю вам использовать метод ниже гибкий поиск по:

flexibleSearchService.getModelByExample (пример)

Это приводит к более поддерживаемому коду. Проверьте wiki для получения дополнительной информации.

Смежные вопросы