JPA标准查询如何;给定字符串";like列+;%
在列的内容(在我的示例中是一组字符串)以给定字符串开头的位置创建查询/谓词很容易:JPA标准查询如何;给定字符串";like列+;%,jpa,criteria-api,Jpa,Criteria Api,在列的内容(在我的示例中是一组字符串)以给定字符串开头的位置创建查询/谓词很容易: public static <E> Predicate stringBeginsWithAnyInSet(String match, SetAttribute<E, String> setAttribute, CriteriaBuilder criteriaBuilder, Root<E> root) { SetJoin<E, String>
public static <E> Predicate stringBeginsWithAnyInSet(String match, SetAttribute<E, String> setAttribute,
CriteriaBuilder criteriaBuilder, Root<E> root) {
SetJoin<E, String> setJoin = root.join(setAttribute);
return criteriaBuilder.like(setJoin, match + "%");
}
不是在编译
如何实现查询而不更改谓词签名-给定的字符串是已知的,谓词应该包含它。您写道:
给定的字符串必须以列中的值开头
所以如果我很明白你想要这样的东西
(让我在表用户
和列电子邮件
中解释这一点)
当把它翻译成JPA时,我们有:
criteriaBuilder.like(builder.literal("given_email"), builder.concat(user.get(User_.email), "%"))
select u.email as col_0_0_
from users u where 'given_email' like concat(u.email, '%');
criteriaBuilder.like(builder.literal("given_email"), builder.concat(user.get(User_.email), "%"))