Java like子句JPQL中的参数

Java like子句JPQL中的参数,java,jpa,eclipselink,jpql,sql-like,Java,Jpa,Eclipselink,Jpql,Sql Like,我正在尝试使用like子句编写JPQL查询: LIKE '%:code%' 我想要代码=4并找到 455 554 646 ... 因为在另一个地方我需要:值不由%chars包装。有什么帮助吗?如果有 LIKE :code 然后呢 namedQuery.setParameter("code", "%" + this.value + "%"); 则值不带“%”符号。如果您需要在同一查询中的其他地方使用它,只需使用“code”以外的其他参数名即可。我不会对所有查询使用命名参数。例如,在中使用命名

我正在尝试使用like子句编写JPQL查询:

LIKE '%:code%'
我想要代码=4并找到

455 554 646 ... 因为在另一个地方我需要:值不由%chars包装。有什么帮助吗?

如果有

LIKE :code
然后呢

namedQuery.setParameter("code", "%" + this.value + "%");

则值不带“%”符号。如果您需要在同一查询中的其他地方使用它,只需使用“code”以外的其他参数名即可。

我不会对所有查询使用命名参数。例如,在中使用命名参数是不常见的

为了解决这个问题,我使用JPQL CONCAT函数,该代码从以下开始模拟:

我在优秀的文档中发现了这种技术:

您可以使用

LOCATEsearchString,candidateString[,startIndex]:返回 CandidateTestRing中searchString的第一个索引。职位以1为基础。 如果未找到字符串,则返回0

仅供参考:有关参数的文件已被颠倒

SELECT 
  e
FROM 
  entity e
WHERE
  (0 < LOCATE(:searchStr, e.property))
只需省略

LIKE %:code%

我不知道我是否迟到或超出范围,但我认为我可以这样做:

String orgName = "anyParamValue";

Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");

q.setParameter("orgName", orgName);

JPA标准API中有一个类似于nice的方法。试着使用它,希望它会有所帮助

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Employees.class);
Root<Employees> rootOfQuery = criteriaQuery.from(Employees.class);
criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%"));
使用下面的JPQL查询。 使用以下相同的标准代码: @试验 公共无效findAllHavingAddressLike{ CriteriaBuilder cb=criteriaUtils.CriteriaBuilder; CriteriaQuery cq=cb.createQueryInstructor.class; Root Root=cq.fromthicker.class; printResultListcq.selectroot.where cb.likeroot.Get讲师地址,%1074%; } 使用JpaRepository或Crudepository作为存储库界面:

@存储库 公共接口CustomerRepository扩展了JpaRepository{ @查询从客户t中选择t,其中LOWERt.name类似%:name% 公开名单findByName@Paramname字符串名; } @Servicevalue=customerService 公共类CustomerServiceImpl实现CustomerService{ 私人客户存储客户存储; //... @凌驾 公共列表模式字符串文本引发异常{ 返回customerRepository.findByNametext.toLowerCase; } }
@Manuele Piastra:下面的答案不是您想要的吗?请注意,这不会让您受到JPQL注入攻击,因为this.value会自动为您正确转义。this%+this.value+%是转义的。如何使此不区分大小写?对我来说,这是最好的解决方案-无连接,无SQL注入。注意:CONCAT?2,“%”将把“%”添加到参数的末尾,使用CONCAT“%”、?2,“%”将其添加到参数的开头和结尾。添加到上面的注释中,在Oracle中,语法是:CONCAT“%”、?2,“%”将%添加到字符串的开头和结尾。下一票:不起作用,这将参数名称更改为代码%
String orgName = "anyParamValue";

Query q = em.createQuery("Select O from Organization O where O.orgName LIKE '%:orgName%'");

q.setParameter("orgName", orgName);
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery criteriaQuery = cb.createQuery(Employees.class);
Root<Employees> rootOfQuery = criteriaQuery.from(Employees.class);
criteriaQuery.select(rootOfQuery).where(cb.like(rootOfQuery.get("firstName"), "H%"));
select i from Instructor i where i.address LIKE CONCAT('%',:address ,'%')");