#java #spring #hybris #flexible-search
#java #весна #sap-коммерция-облако #гибкий поиск
Вопрос:
Я пытаюсь создать DAO, который должен искать элемент в таблице базы данных. Я довольно новичок в Hybris, поэтому я не знаю, что именно здесь не так (запрос или мой нежелательный код). Это ошибка, которая появляется в cmd.
СЕРЬЕЗНОЕ: Servlet.service() для сервлета [DispatcherServlet] в контексте с path [] выдал исключение [Ошибка обработки запроса; вложенное исключение — de.hybris.platform.servicelayer.search.exceptions .Исключение FlexibleSearchException: ошибка поиска SQL — включите свойство ‘flexible.search.exception.show.запрос.подробности»для получения дополнительной информации] с основной причиной java.sql.SQLException: недопустимое значение для getLong()
Это моя реализация класса DAO
@Component(value = "arbRedirectHttpTypeDao")
public class ArbRedirectHttpTypeDaoImpl implements ArbRedirectHttpTypeDao {
private static final Logger LOG = Logger.getLogger(ArbRedirectHttpTypeDaoImpl.class);
@Autowired
private FlexibleSearchService flexibleSearchService;
public FlexibleSearchService getFlexibleSearchService() {
return flexibleSearchService;
}
public void setFlexibleSearchService(FlexibleSearchService flexibleSearchService) {
this.flexibleSearchService = flexibleSearchService;
}
@Override
public ArbRedirectHttpTypeModel findNewUrlByOldUrl(String oldUrl) {
final String query = "SELECT {" ArbRedirectHttpTypeModel.NEWURL "}"
" FROM {" ArbRedirectHttpTypeModel._TYPECODE "} WHERE {"
ArbRedirectHttpTypeModel.OLDURL "}=?oldUrl";
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(query);
flexibleSearchQuery.addQueryParameter("oldUrl", oldUrl);
final List<ArbRedirectHttpTypeModel> locationsByCode = flexibleSearchService
.<ArbRedirectHttpTypeModel> search(flexibleSearchQuery)
.getResult();
LOG.info("-------------------------------------" locationsByCode.get(0));
if (locationsByCode != null amp;amp; !locationsByCode.isEmpty())
{
return locationsByCode.get(0);
}
else
{
return null;
}
}
}
И здесь я пытаюсь его вызвать
@Resource
private ArbRedirectHttpTypeDao arbRedirectHttpTypeDao;
ArbRedirectHttpTypeModel arbRedirectHttpTypeModel = arbRedirectHttpTypeDao.findNewUrlByOldUrl("/Aapuvdc");
Ответ №1:
используйте «SELECT {» ArbRedirectHttpTypeModel.PK «}». Он вернет объект, и вы можете получить все атрибуты с помощью getter
Ответ №2:
"SELECT {" ArbRedirectHttpTypeModel.NEWURL "}"
Здесь вы пытаетесь вернуть NEWURL
модель, которая, я полагаю, будет строкой. Гибкий поисковый запрос возвращает pk из элемента и по умолчанию преобразует его в модель hybris. Вместо этого попробуйте реорганизовать свой запрос, чтобы выбрать pk
"SELECT {" ArbRedirectHttpTypeModel.PK "}"
Или вы можете оставить запрос таким, какой он есть, и задать возвращаемый тип запроса, FlexibleSearchQuery.setResultClassList(classList);
например:
flexibleSearchQuery.setResultClassList(Collections.singletonList(String.class));
Вам не нужно приводить .search()
ArbRedirectHttpTypeModel
ни к одному из них. Вы можете просто использовать
SearchResult<String> result = flexibleSearchService.search(flexibleSearchQuery).getResult();
return result.getCount() > 0 ? result.getResult().get(0) : null;
Комментарии:
1. Я помещаю некоторый код ниже, который вы воспроизводите, в результате я получаю только ПК, что я могу сделать, чтобы получить определенный элемент столбца?
2. не используйте setResultClassList и возвращайте результат как SearchResult< ArbRedirectHttpTypeModel>