首页 > 解决方案 > JPA 标准查询如何“给定字符串”,如 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);

没有编译。

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

标签: jpacriteria-api

解决方案


你写了:

给定的字符串必须以列中的值开头

所以如果我很好理解你想要这样的东西(让我在桌子上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), "%"))

推荐阅读