unable to evaluate the expression method threw 'java.lang.illegalargumentexception' exception while excuting the flexible search query

1.1k views Asked by At

hai i am getting products details from db while exceuting the flexiblesearchservice.search(query) it is throwing this error.my flexible search query is working fine with hac. but throwing error from flexible search service. my query and service is shown below.

            "({{select {p:"+ProductModel.PK+"} from { "+ OrderModel._TYPECODE +" as o  " +
            " join "+ OrderStatus._TYPECODE+" as os on {os:pk} = {o:"+OrderModel.STATUS+"}"+
            " join "+ OrderEntryModel._TYPECODE +" as oe on {oe:"+ OrderEntryModel.ORDER +"} = {o:"+OrderModel.PK+"}"+
            " join "+ ProductModel._TYPECODE +" as p on {oe:"+OrderEntryModel.PRODUCT+"} = {p:"+ProductModel.PK+"}"+
            " join "+ CatalogVersionModel._TYPECODE+" as cv on { p:"+ProductModel.CATALOGVERSION +"} = {cv:"+CatalogVersionModel.PK+"}"+
            " join "+ CatalogModel._TYPECODE +" as c on {p:"+ProductModel.CATALOG+"} = {c:"+CatalogModel.PK+"}} "+
            "where {os:code}='"+OrderStatus.COMPLETED +"' and {"+OrderModel.DATE+"}>'2017-08-16 00:00:00.000' " +
                "and {"+OrderModel.DATE+"}<'2020-09-30 00:00:00.000' " +
                "and {cv:"+CatalogVersionModel.VERSION+"}= 'Online' " +
                "and {c:"+CatalogModel.ID+"} like 'apparelProductCatalog' " +
                "group by {p:"+ProductModel.PK+"} order by sum({oe:"+OrderEntryModel.QUANTITY+"}) desc" +
            "  limit 10 }})";
  final FlexibleSearchQuery fQuery = new FlexibleSearchQuery(QUERY);
            fQuery.setResultClassList(Arrays.asList(ProductModel.class));
            final SearchResult<ProductModel> searchResult =flexibleSearchService.search(fQuery);
            final List<ProductModel> productModelList= searchResult.getResult();```
**error:** unable to evaluate the expression method threw 'java.lang.illegalargumentexception' exception
please help me out.

1

There are 1 answers

0
pavanjoshi On
"where {os:code}='"+OrderStatus.COMPLETED +"'

This above code may be the issue, OrderStatus.COMPLETED returns an object, not String.

You can pass it as a query parameter.

"where {os:code} = '" + OrderStatus.COMPLETED.getCode() +"'