2013-02-18 7 views
1

단순한 검색 엔진을 코딩하려고합니다. 내 DAO 구현에서NamedQueries LIKE를 사용하는 스프링 % %

:

@Transactional(readOnly=true) 
    public List<Thread> findAllWithReferer(String referer) { 
     Map<String, Object> params = new TreeMap<String, Object>(); 

     log.debug("DAO:findAllWithReferer(String referer) - referer=" + referer); 
     params.put("referer", "%" + referer + "%"); 
     @SuppressWarnings("unchecked") 
     List<Thread> threads = EntityManagerUtil.executeNamedQueryInTransaction("Thread.findAllWithReferer", params); 
     return (threads); 
    } 

의 Utils 클래스 방법 위의 'executeNamedQueryInTransaction'제공 : 내 개체에 연결

@SuppressWarnings("rawtypes") 
    public static List executeNamedQueryInTransaction(String queryName, Map<String, Object> params) { 
     EntityManager em = createEntityManagerAndOpenTransaction(); 
     Query query = em.createNamedQuery(queryName); 

     for (String key : params.keySet()) 
      query.setParameter(key, params.get(key)); 

     List l = query.getResultList(); 
     commitTransactionAndCloseEntity(em); 

     return l; 
    } 

그리고 Namedquery을 :

@NamedQueries({ 
    @NamedQuery(name = "Thread.findAllWithReferer", query = "SELECT t FROM Thread t WHERE t.title LIKE :referer") 
}) 

난 그냥 예를 들어, 모든 레코드를 내 엔터티 tit에서 'toto'문자열과 일치 시키려고합니다. le 필드에서 DAO 연산자 % %를 사용합니다.

토토가 큰 큰 Doestotois :

여기에 맞게 수있는 몇 가지 exemple이야? dghjgdjtotojdashkjdhk

하지만 작동하지 않습니다. 그냥 정확한 문자열이 작동합니다. 'executeNamedQueryInTransaction'메서드에 대한 코드가 정확하고 완벽하게 작동하고 싶습니다. 내 문제는 여기에서 온 것 같아요 :

params.put("referer", "%" + referer + "%"); 

아무도 도와 줄 수 있습니까? 미리 도움을 주셔서 감사합니다.

답변

0

그냥 시도하십시오 params.put("referer", '%' + referer.toLowerCase() + '%');. 작은 따옴표로 큰 따옴표를 대체하십시오.

+0

도움 주셔서 감사합니다. – user1364743

관련 문제