Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA标准查询如何;给定字符串";like列+;%_Jpa_Criteria Api - Fatal编程技术网

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), "%"))