java - 使用 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;
推荐阅读
- windows - 使用 ConvertTo-SecureString 问题:我可以使用 powershell 重置多个 ADUC 密码吗?
- javascript - 啁啾 wasm DOMException
- nosql - 使用 Fakeit 生成数据
- node.js - 未经同意屏幕使用 Drive API 将文件上传到 Google Drive
- javascript - 如何改变满足一定条件的数组的两个连续值?
- python - LSTM 输入形状和输出
- python - 如何在pydruid中使用ThetaSketchOp函数
- ios - 关闭视频播放器后未删除设备方向
- mongodb - 查询以更新 mongodb 中的数组元素
- amazon-ec2 - 在 Pending:Wait 状态下终止 Autoscaling 实例(带 Terraform)