首页 > 解决方案 > 使用 FlexibleSearchService Hybris 在数据库表中搜索

问题描述

我尝试制作一个需要在数据库表中搜索项目的 DAO。我是 Hybris 的新手,所以我不知道这里到底出了什么问题(查询或我的垃圾代码)。那就是cmd中出现的错误。

严重:servlet [DispatcherServlet] 的 Servlet.service() 在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException:SQL 搜索错误 - 启用属性 'flexible.search.exception.show.query.details' 以获取更多详细信息] 根本原因 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 && !locationsByCode.isEmpty())
    {
        return locationsByCode.get(0);
    }
    else
    {
        return null;
    }

}
}

在这里我试着称呼它

 @Resource
 private ArbRedirectHttpTypeDao arbRedirectHttpTypeDao;
ArbRedirectHttpTypeModel arbRedirectHttpTypeModel = arbRedirectHttpTypeDao.findNewUrlByOldUrl("/Aapuvdc");

标签: javaspringhybrisflexible-search

解决方案


"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;

推荐阅读