2013-02-18 51 views
1

我只想編寫一個簡單的搜索引擎。NamedQueries Spring使用LIKE%

在我的DAO實現:

@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") 
}) 

我只是想要將所有記錄與例如字符串'toto'匹配在我的實體山雀中在我的DAO中使用運算符%%。

下面是一些爲例,可以匹配:

TOTO是偉大 Doestotois偉大? dghjgdjtotojdashkjdhk

但它不起作用。只是確切的字符串的作品。 我想確切的說,'executeNamedQueryInTransaction'方法的代碼是正確的,並且完美地工作。我認爲我的問題來自這裏:

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

有人能幫助我嗎? 在此先感謝您的幫助。

回答

0

試試這個params.put("referer", '%' + referer.toLowerCase() + '%');。 用簡單的引號替換雙引號。

+0

感謝您的幫助。 – user1364743 2013-02-19 13:10:24