[ 
https://issues.apache.org/jira/browse/CXF-7848?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andriy Redko reassigned CXF-7848:
---------------------------------

    Assignee: Andriy Redko

> JPATypedQueryVisitor does not support isNull or isNotNull JPA operation
> -----------------------------------------------------------------------
>
>                 Key: CXF-7848
>                 URL: https://issues.apache.org/jira/browse/CXF-7848
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 3.2.6
>            Reporter: Mitesh Panchal
>            Assignee: Andriy Redko
>            Priority: Major
>
> Upon supplying null as argument to field in FIQL, CXF generated Query does 
> not return any results. 
> e.g. _s=city==null or _s=city!=null  does not return any results. while 
> leveraging JPATypedQueryVisitor which build criteria query.  
> Found couple of instances where this issue is discussed or resolved. 
> e.g. [https://github.com/jirutka/rsql-parser/issues/21] : talks about add a 
> new operator as an option 
> or [https://github.com/jirutka/rsql-parser] solves the issue by looking at 
> the argument and creating a criteria builder query with help of 
> builder.isNull(exp); or builder.isNotNull(exp); statements. 
> Please let us know what can be done?
> Workaround I have applies for temporary is as below 
>  
> {code:java}
> /** Enhanced AbstractSearchConditionVisitor.java method doBuildPredicate  **//
> private Predicate doBuildPredicate(ConditionType ct, Path<?> path, Class<?> 
> valueClazz, Object value) {
> .
>  
> .
> case EQUALS:
>     if (clazz.equals(String.class)) {
>          if(value.toString().equalsIgnoreCase("null")){
>             pred = builder.isNull(exp);
>          }else if(value.toString().equalsIgnoreCase("notNull")){
>             pred = builder.isNotNull(exp);
>          }else{
>                final String originalValue = value.toString();
>                String theValue = 
> SearchUtils.toSqlWildcardString(originalValue,                       
> isWildcardStringMatch());
>                if (SearchUtils.containsWildcard(originalValue)) {
>                      if (SearchUtils.containsEscapedChar(theValue)) {
>                          pred = builder.like((Expression<String>)exp, 
> theValue, '\\');
>                      } else {
>                           pred = builder.like((Expression<String>)exp, 
> theValue);
>                      }
>                 } else {
>                       pred = builder.equal(exp, clazz.cast(value));
>                 }
>            }
>       } else {
>            pred = builder.equal(exp, clazz.cast(value));
>    }
> .
> .
> .
>  
> {code}
>  
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to