使用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");

解决方法

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

使用“ SELECT {” + ArbRedirectHttpTypeModel.PK +“}”。它将返回对象,您可以通过getter获取所有属性