2016-12-16 19 views
0

У меня есть проект, основанный на платформе Spring-model-view-controller (MVC). Версия платформы Spring-model-view-controller (MVC) - 3.2.8.Язык запросов на сохранение Java - LIKE

У меня есть этот метод в моем 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; 
     } 
    } 

Но я понял, что запрос не делает LIKE, но равно

пружинным Я ищу это "iOS/032/027", хорошо для "iOS/032/027", но не для "iOS/" или "027"

ответ

0

Попробуйте присоединяя правильный подстановочные к как операции:

str_param like concat(:searchString,'%') 

В Jpql doc состояния

LIKE оценивает, если две строки матча, '%' и '_' являются допустимыми подстановочные и ESCAPE символ не является обязательным