1

単純な検索エンジンをコーディングしたいだけです。

私の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'とすべてのレコードを一致させたいだけです。

一致する可能性のあるいくつかの例を次に示します。

トトは素晴らしいですドストトは素晴らしいですか?dghjgdjtotojdashkjdhk

しかし、それは機能しません。正確な文字列だけが機能します。'executeNamedQueryInTransaction'メソッドへのコードが正しく、完全に機能することを正確に示したいと思います。私の問題はここから来ていると思います:

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

誰か助けてくれませんか?よろしくお願いします。

4

1 に答える 1

0

これを試してみてくださいparams.put("referer", '%' + referer.toLowerCase() + '%');。二重引用符を単純引用符に置き換えます。

于 2013-02-19T10:28:33.693 に答える