java – 带参数的灵活搜索返回null值
我必须在服务
Java类中执行这种灵活的搜索查询:
select sum({oe:totalPrice}) from {Order as or join CustomerOrderStatus as os on {or:CustomerOrderStatus}={os:pk} join OrderEntry as oe on {or.pk}={oe.order}} where {or:versionID} is null and {or:orderType} in (8796093066999) and {or:company} in (8796093710341) and {or:pointOfSale} in (8796097413125) and {oe:ecCode} in ('13','14') and {or:yearSeason} in (8796093066981) and {os:code} not in ('CANCELED','NOT_APPROVED') 当我在hybris管理控制台中执行此查询时,我正确获取:
在我的Java服务类中,我写了这个: private BigDecimal findGroupedOrdersData(String total,String uncDisc,String orderPromo,Map<String,Object> queryParameters) { BigDecimal aggregatedValue = new BigDecimal(0); final StringBuilder queryBuilder = new StringBuilder(); queryBuilder.append("select sum({oe:").append(total).append("})"); queryBuilder.append( " from {Order as or join CustomerOrderStatus as os on {or:CustomerOrderStatus}={os:pk} join OrderEntry as oe on {or.pk}={oe.order}}"); queryBuilder.append(" where {or:versionID} is null"); if (queryParameters != null && !queryParameters.isEmpty()) { appendWhereClausesToBuilder(queryBuilder,queryParameters); } queryBuilder.append(" and {os:code} not in ('"); queryBuilder.append(CustomerOrderStatus.CANCELED.getCode()).append("',"); queryBuilder.append("'").append(CustomerOrderStatus.NOT_APPROVED.getCode()).append("')"); FlexibleSearchQuery query = new FlexibleSearchQuery(queryBuilder.toString(),queryParameters); List<BigDecimal> result = Lists.newArrayList(); query.setResultClassList(Arrays.asList(BigDecimal.class)); result = getFlexibleSearchService().<BigDecimal> search(query).getResult(); if (!result.isEmpty() && result.get(0) != null) { aggregatedValue = result.get(0); } return aggregatedValue; } private void appendWhereClausesToBuilder(StringBuilder builder,Object> params) { if ((params == null) || (params.isEmpty())) return; for (String paramName : params.keySet()) { builder.append(" and "); if (paramName.equalsIgnoreCase("exitCollection")) { builder.append("{oe:ecCode}").append(" in (?").append(paramName).append(")"); } else { builder.append("{or:").append(paramName).append("}").append(" in (?").append(paramName).append(")"); } } } 搜索(查询).getResult()函数之前的查询字符串是: query: [select sum({oe:totalPrice}) from {Order as or join CustomerOrderStatus as os on {or:CustomerOrderStatus}={os:pk} join OrderEntry as oe on {or.pk}={oe.order}} where {or:versionID} is null and {or:orderType} in (?orderType) and {or:company} in (?company) and {or:pointOfSale} in (?pointOfSale) and {oe:ecCode} in (?exitCollection) and {or:yearSeason} in (?yearSeason) and {os:code} not in ('CANCELED','NOT_APPROVED')],query parameters: [{orderType=OrderTypeModel (8796093230839),pointOfSale=B2BUnitModel (8796097413125),company=CompanyModel (8796093710341),exitCollection=[13,14],yearSeason=YearSeasonModel (8796093066981)}] 但在搜索(查询)结果为[null]之后. 解决方法
另外,如果要在java代码中禁用限制.你可以这样做..
@Autowired private SearchRestrictionService searchRestrictionService; private BigDecimal findGroupedOrdersData(String total,Object> queryParameters) { searchRestrictionService.disableSearchRestrictions(); // You code here searchRestrictionService.enableSearchRestrictions(); return aggregatedValue; } 在上面的代码中,您可以禁用搜索限制,在搜索结果之后,您可以再次启用它. 要么 您可以使用sessionService在Local View中执行灵活的搜索查询. executeInLocalView方法可用于在隔离的会话中执行代码. (SearchResult<? extends ItemModel>) sessionService.executeInLocalView(new SessionExecutionBody() { @Override public Object execute() { sessionService.setAttribute(FlexibleSearch.DISABLE_RESTRICTIONS,Boolean.TRUE); return flexibleSearchService.search(query); } }); 在这里,您将设置DISABLE RESTRICTIONS = true,这将在管理上下文[无限制]中运行查询. 检查this 更好我建议你检查一下对你的项目类型有什么限制.您只需登录Backoffice / HMC即可 后台: >转到系统 – >个性化(SearchRestricion)>按受限类型搜索>检查筛选查询并根据该数据分析您的项目数据.>您还可以检查应用了哪个限制的Principal(UserGroup).>要确认,只需通过禁用活动标志进行检查. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 有没有办法让构造函数在Java中返回一个== null的对象?
- ArrayList中的java – toArray(T [])方法
- java – 使GSON将数字反序列化为整数或双精度数
- java.util.concurrent.CompletionStage – 如何处理异常?
- java的poi技术读取和导入Excel实例
- 多线程 – 与每个物理核心绑定的线程并行的memset
- java.util.zip.ZipException:带有firebase的重复条目
- 记一次Eclipse关于JDK和JRE的问题 说说Javac
- java按照关键字指定的key删除redis(支持模糊删除)
- java – 基于Spring MVC注释的多模块项目配置