jpa - 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);
没有编译。
如何实现查询而不更改谓词签名 - 给定的字符串是已知的并且谓词应该包含它。
解决方案
你写了:
给定的字符串必须以列中的值开头
所以如果我很好理解你想要这样的东西(让我在桌子上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), "%"))
推荐阅读
- java - 持久列表
处于休眠状态 - xamarin.forms - 错误 XF003:Xamarin.Forms 需要 msbuild。不再支持 xbuild
- c# - 缓存 wcf 服务的问题 - “AspNetCacheProfileAttribute 只能用于 GET 操作”
- javascript - 在 php 中使用 javascript var 获取 wordpress 附件
- proxy - 具有公司代理身份验证的 Chrome 无头浏览器无法正常工作
- android - 片段中的轮播错误
- vidyo - Vidyo - 如何设置 logFileName 写入本地文件
- java - 在Java Stream中的多个数组内循环
- mysql - MySQL连接行值作为列名
- vue.js - 在类星体框架数据表中获取选定的行 ID