gpt4 book ai didi

java - 通配符转义 JPA 规范

转载 作者:行者123 更新时间:2023-12-01 09:40:26 24 4
gpt4 key购买 nike

我正在使用 JPA 规范执行器根据用户在 UI 上的输入通过记录来实现搜索。例如,应使用 LIKE 子句在 message 列中搜索输入之一。目前我是这样做的:

if (StringUtils.isNotBlank(searchOptions.getSearchString())) {
String likeExpression = String.format("%%%s%%", searchOptions.getSearchString());
specifications = specifications.and(
(root, query, cb) -> cb.like(root.get("message"), likeExpression));
}

问题是,如果用户的输入包含 % 等通配符或 [] 内的某些文本,我不会将其作为文字搜索,而是将其视为通配符。

任何人都可以建议我如何避免这种情况,并始终搜索列中的文字文本,而不必手动转义 java 代码中的每个此类字符?

我使用的RDBS是SQL Server。

最佳答案

您应该绑定(bind)一个参数,而不是将其插入到表达式字符串中。

CriteriaQuery<Person> criteria = build.createQuery( Person.class );
Root<Person> personRoot = criteria.from( Person.class );
criteria.select( personRoot );
ParameterExpression<String> eyeColorParam = builder.parameter( String.class );
criteria.where( builder.equal( personRoot.get( Person_.eyeColor ), eyeColorParam ) );
TypedQuery<Person> query = em.createQuery( criteria );
query.setParameter( eyeColorParam, "brown" );
List<Person> people = query.getResultList();

关于java - 通配符转义 JPA 规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38500399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com