гибкий поисковый запрос возвращает null в файле Java, но отлично работает в hac

#java #hybris

#java #sap-commerce-cloud

Вопрос:

Я пытаюсь извлечь некоторые данные с помощью метода. Мой запрос отлично работает в hac, но при использовании в коде Java он выдает значение null. Ниже приведен мой Java-код:-

  public class abc
 {
        @Resource
     private UserService userService;
     @Resource
     private SearchRestrictionService searchRestrictionService;
     @Resource
     private CatalogVersionService catalogVersionService;

         public List<ProductModel> findRequiredProducts()
         {
             this.userService.setCurrentUser(userService.getAdminUser());
             this.searchRestrictionService.disableSearchRestrictions();
                 this.catalogVersionService.setSessionCatalogVersion("abcCatalog", "Online");
          final String query = "select {p:name},{p.creationtime} from {Product! as p}";
          final FlexibleSearchQuery productQuery = new FlexibleSearchQuery(query);
          final SearchResult<ProductModel> searchResult = getFlexibleSearchService().search(productquery);
          this.searchRestrictionService.enableSearchRestrictions();
         final List<ProductModel> requiredProducts = searchResult.getResult();

         }

 }
  

Здесь при выполнении этого кода я получаю lazylist [null]» в списке requiredProduct. В чем может быть проблема.

Комментарии:

1. Как насчет FlexibleSearchQuery???

2. @JayPrakashKumar Я определил запрос, который я выполняю в hac, в строковом запросе. Я передал эту строку (запрос) в flexibleSearchQueryobject. Я не понимаю, о чем вы спрашиваете

3. что означает эта строка: окончательный гибкий поисковый запрос productQuery = новый гибкий поисковый запрос (query);

4. @JayPrakashKumar Сэр, чтобы использовать flexibleSEArchService в hybris, я думаю, что необходимо передать запрос в объект flexibleSearchQuery. Без этого eclipse показывает ошибку.

Ответ №1:

При использовании гибкой службы поиска единственным атрибутом, который вас должен интересовать, является первичный ключ, проблема здесь в том, что гибкая служба поиска попытается преобразовать имя (строку) в PK (длинный), попробуйте со следующим кодом (Groovy script) :

 import de.hybris.platform.servicelayer.search.FlexibleSearchQuery
import de.hybris.platform.servicelayer.search.SearchResult

def userService = spring.getBean("userService")
def searchRestrictionService = spring.getBean("searchRestrictionService")
def catalogVersionService = spring.getBean("catalogVersionService")
def flexibleSearchService = spring.getBean("flexibleSearchService")

userService.setCurrentUser(userService.getAdminUser())

def query = "select {pk} from {Product! as p}"
FlexibleSearchQuery productQuery = new FlexibleSearchQuery(query);
def searchResult = flexibleSearchService.search(productQuery);
def requiredProducts = searchResult.getResult();
  

Помните об этом! означает, что вы не будете загружать какие-либо подтипы

Комментарии:

1. Спасибо за ваше предложение, но мой проект не позволяет мне включать groovy script. Можете ли вы подсказать мне, какие изменения мне нужно внести в мой java-код, не включая groovy script.

2. выберите {pk} из {Product! поскольку p} все остальные атрибуты будут загружены внутри вашего объекта модели, нет необходимости выбирать их по отдельности.