使用“%”标准搜索 sql 原生 sql

Search like sql using '%' criteria native sql

我有一个代码可以连接 PL/SQL 搜索就像使用 '%' 并且我使用标准来实现

String sql = "SELECT * FROM EMPLOYEE ";
Query query = entityManager.createNativeQuery(sql.toString());

if(searchCharacterInfo.getKeyword() != null){
      sql += " WHERE NAME LIKE %:keyword% ";
      query = entityManager.createNativeQuery(sql).setParameter("keyword", keyword);
}

List<Object> res =  query.getResultList();
return res;

当我运行这段代码显示错误时:

Could not locate named parameter keyword

请帮我解决这个问题!

参数占位符不是盲目地替换为占位符值,所以%:keyword%不是合法的语法。

您需要在 SQL 中包含 LIKE :keyword,并从 Java 侧将关键字作为 "%" + keyword + "%" 传递。

或者,您可以在 SQL 端连接字符串:LIKE ('%' || :keyword || '%').

假设您有一个模型 class EMPLOYEE。所以你可以写标准如下:

        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<EMPLOYEE> cq = cb.createQuery(EMPLOYEE.class);
        Root<EMPLOYEE> employee = cq.from(EMPLOYEE.class);
        cq.select(employee);
        List<Predicate> predicates = new ArrayList<>();
        if (searchCharacterInfo.getKeyword() != null) {
            predicates.add(cb.like(employee.get("name"), "%" + searchCharacterInfo.getKeyword() + "%"));
        }
    
        cq.where(predicates.toArray(new Predicate[0]));
        List<EMPLOYEE> res =  entityManager.createQuery(cq).getResultList();