【发布时间】:2022-02-01 11:50:13
【问题描述】:
假设以下查询:
public List<UserEntity> search(String str, Integer page, Integer limit) {
String sql = "SELECT u FROM UserEntity u ";
if (str.length() > 0) {
sql += "INNER JOIN u.account a ";
}
sql += "WHERE 1 = 1 ";
if (str.length() > 0) {
sql += "AND LOWER(u.name) LIKE :str OR LOWER(u.surname) LIKE :str OR LOWER(a.email) LIKE :str ";
}
Query q = entityManager.createQuery(sql);
if (str.length() > 0) {
q.setParameter("str", str.toLowerCase() + "%");
}
q.setFirstResult(page * limit);
q.setMaxResults(limit);
return q.getResultList();
}
如您所见,我们有两个条件来确定表是否会与另一个表连接,以及是否存在一些 where 条件。此外,我们有 OR 条件,以便可以针对多个列(其中一个取自连接帐户表)检查输入“str”。
现在我想用 CriteriaQuery 来写这个,但问题是我无法设法包含上述所有条件。
【问题讨论】:
标签: java spring-boot jpa