给自己做个备忘
/** 检索关键字 */
if (keyWord != null && !keyWord.trim().equals(""))
{
// 创建子查询对象
Subquery<Store> subquery = criteriaQuery.subquery(Store.class);
Root<Store> root2 = subquery.from(Store.class);
subquery.select(root2.<Store> get("id"));
subquery.where(criteriaBuilder.like(root2.<String> get("name"), "%" + keyWord + "%"));
// 给读者稍微解释一下,也给自己留个记忆
// 这里的意图是将关键做两个模糊检索,一个是在本表中检索title字段
// 就是criteriaBuilder.like(root.<String> get("title"), "%" + keyWord + "%")
// 二是将字段与子表中的检索出来的id与本表中store字段做匹配
// criteriaBuilder.in(root.get("store")).value(subquery))
// 至于id怎么检索出来的,用子查询模糊检索出来的,参照上面的子查询
restrictions = criteriaBuilder.and(restrictions,criteriaBuilder.or(criteriaBuilder.like(root.<String> get("title"), "%" + keyWord + "%"),criteriaBuilder.in(root.get("store")).value(subquery)));
}