如何解决使用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获取所有属性
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。