【问题标题】:JPA criteria query how to "given string" like column+%JPA 标准查询如何“给定字符串”,如 column+%
【发布时间】:2020-06-21 10:25:33
【问题描述】:

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

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);

没有编译。

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

【问题讨论】:

    标签: jpa criteria-api


    【解决方案1】:

    你写道:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2020-12-16
      • 2012-04-01
      • 1970-01-01
      相关资源
      最近更新 更多