2016-12-16 2 views
0

J'ai un projet basé sur le framework MVC (Spring Web Model-View-Controller). La version du framework MVC (Spring-model-view-controller) est 3.2.8.Le langage de requête Java Persistence - LIKE

J'ai cette méthode dans mon DAO

@Override 
    public List<Application> findByQuickSearch(String searchString) { 

     final StringBuilder queryString = new StringBuilder(" select app from Application app where upper (ticket_id) like :searchString or upper (id) like :searchString "); 

     queryString.append(" and app.status != " + Status.DRAFT.ordinal()); 

     queryString.append(" order by app.submissionTime desc "); 

     try { 

      final Query query = getEntityManager().createQuery(queryString.toString()); 

      searchString = searchString.replace("!", "!!") 
         .replace("%", "!%") 
         .replace("_", "!_") 
         .replace("[", "![") 
         .trim() 
         .toUpperCase(); 


      System.out.println ("searchString -----> " + searchString); 


      query.setParameter ("searchString", searchString);      

      return query.getResultList(); 


     } catch (RuntimeException re) { 
      log.error("findByCompetentBodyAndStatus failed", re); 
      throw re; 
     } 
    } 

Mais je me suis aperçu que la requête ne fait pas identiques, mais égale

printemps Je cherche est "iOS/032/027", ok pour "iOS/032/027", mais pas pour "iOS/" ou "027"

Répondre

0

Essayez annexant un caractère générique valide à l'opération comme:

str_param like concat(:searchString,'%') 

Les états Jpql doc

COMME évalue si les deux correspondent à cordes, '%' et '_' sont des jokers valides, et le caractère ESCAPE est facultative