我只想编写一个简单的搜索引擎。
在我的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'。
以下是一些可以匹配的例子:
toto很棒 Doestotois棒极了吗? dghjgdjtotojdashkjdhk
但它不起作用。只是确切的字符串工作。 我想精确地将代码转换为'executeNamedQueryInTransaction'方法是正确的并且工作正常。我想我的问题来自这里:
params.put("referer", "%" + referer + "%");
有人可以帮助我吗? 在此先感谢您的帮助。
答案 0 :(得分:0)
试试这个params.put("referer", '%' + referer.toLowerCase() + '%');
。
用简单的引号替换双引号。