Java like子句JPQL中的参数
我正在尝试使用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 '%: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 ,'%')");