Java持久性查询语言 - LIKE

时间:2016-12-16 13:28:23

标签: java spring spring-mvc persistence javax

我有一个基于Spring Web模型 - 视图 - 控制器(MVC)框架的项目。 Spring Web模型 - 视图 - 控制器(MVC)框架的版本是3.2.8。

我的DAO中有这个方法

@Override
    public List<Application> findByQuickSearch(String searchString) {

        final StringBuilder queryString = new StringBuilder("  select app from Application app where upper (ticket_id) like :searchString or upper (id) like :searchString " );

        queryString.append(" and app.status != " + Status.DRAFT.ordinal());

        queryString.append(" order by app.submissionTime desc ");

        try {

            final Query query = getEntityManager().createQuery(queryString.toString());

            searchString = searchString.replace("!", "!!")
                       .replace("%", "!%")
                       .replace("_", "!_")
                       .replace("[", "![")
                       .trim()
                       .toUpperCase();


            System.out.println ("searchString -----> " + searchString);


            query.setParameter ("searchString", searchString);                      

            return query.getResultList();


        } catch (RuntimeException re) {
            log.error("findByCompetentBodyAndStatus failed", re);
            throw re;
        }
    }

但我意识到查询不是LIKE而是等于

我正在寻找的春天是"iOS/032/027",适用于"iOS/032/027",但不适用于"iOS/""027"

1 个答案:

答案 0 :(得分:0)

尝试在有类似的操作中附加有效的通配符:

str_param like concat(:searchString,'%') 

Jpql doc

  

LIKE判断两个字符串是否匹配,'%'和'_'是否是有效的通配符,并且ESCAPE字符是可选的