【问题标题】:NamedQueries Spring using LIKE % %NamedQueries Spring 使用 LIKE % %
【发布时间】:2013-02-18 22:46:48
【问题描述】:

我只想编写一个简单的搜索引擎。

在我的 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);
    }

提供上述方法“executeNamedQueryInTransaction”的 Utils 类:

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

我只想使用我的 DAO 中的运算符 % % 将所有记录与我的实体标题字段中的字符串“toto”进行匹配。

这里有一些可以匹配的例子:

多多很棒 Dotototo 很棒吗? dghjgdjtotojdashkjdhk

但它不起作用。只是确切的字符串有效。 我想确切地说,“executeNamedQueryInTransaction”方法中的代码是正确的并且可以完美运行。我想我的问题来自这里:

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

有人可以帮帮我吗? 提前感谢您的帮助。

【问题讨论】:

    标签: spring hibernate hql entitymanager


    【解决方案1】:

    试试这个params.put("referer", '%' + referer.toLowerCase() + '%');。 用单引号替换双引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 2014-08-31
      • 2019-05-29
      • 2016-01-18
      相关资源
      最近更新 更多