加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 带参数的灵活搜索返回null值

发布时间:2020-12-15 04:30:38 所属栏目:Java 来源:网络整理
导读:我必须在服务 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 {o
我必须在服务 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管理控制台中执行此查询时,我正确获取:

1164.00000000

在我的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代码中哪里错了?谢谢.

解决方法

另外,如果要在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).>要确认,只需通过禁用活动标志进行检查.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读