JPA条件查询如何"given string" like column+%

JPA criteria query how to "given string" like column+%

创建一个查询/谓词,其中列的内容(在我的例子中是一组字符串)以给定字符串开头很容易:

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 + "%");
}

但我需要它以另一种方式围绕给定字符串必须以列中的值开头 - 在我的例子中至少有一个值。

问题

criteriaBuilder.like( match + "%", setJoin);

未编译。

如何在不更改谓词签名的情况下实现查询 - 给定的字符串是已知的并且谓词应该包含它。

您写道:

given string must begin with the value in the column

所以如果我很好理解你想要这样的东西 (让我在 table users 上用 email 列解释一下)

select u.email as col_0_0_
from users u where 'given_email' like concat(u.email, '%');

将其翻译成JPA CriteriaQuery我们有:

criteriaBuilder.like(builder.literal("given_email"), builder.concat(user.get(User_.email), "%"))