gpt4 book ai didi

hibernate - 连接字段上的 JPA 查询过滤器

转载 作者:行者123 更新时间:2023-12-03 15:10:02 25 4
gpt4 key购买 nike

我想使用“name + surname”字符串作为键来查询我的“customers”表。

姓名和姓氏存储在不同的字段中。

所以我的查询是:

SELECT 
*
FROM
customers
WHERE
CONCAT(name,' ',surname) LIKE '%term%'
OR CONCAT(surname,' ',name) LIKE '%term%'

但是,我不能这样做,我的查询是 JPA2 条件查询 .就像是:
CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery();
Root<Customer> from = cq.from(Customer.class);
cq.select(from);

Predicate whereClause = cb.or(
cb.like(from.<String>get("name"), "%"+ r +"%"),
cb.like(from.<String>get("surname"), "%"+ r +"%"),
);

cq.where(whereClause);
TypedQuery<Customer> query = getEntityManager().createQuery(cq);
list = query.getResultList();

请问如何通过名字和姓氏的组合过滤我的结果集?

最佳答案

使用 CriteriaBuilder.concat(Expression, Expression) :

Expression<String> exp1 = cb.concat(from.<String>get("name"), " ");
exp1 = cb.concat(exp1, from.<String>get("surname"));
Expression<String> exp2 = cb.concat(from.<String>get("surname"), " ");
exp2 = cb.concat(exp2, from.<String>get("name"));
Predicate whereClause = cb.or(cb.like(exp1, "%"+ r +"%"), cb.like(exp2, "%"+ r +"%"));

关于hibernate - 连接字段上的 JPA 查询过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15503658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com