我有这些(简化的)实体:
@Entity public class Project
{
@ManyToOne private Type type;
}
@Entity public class Type
{
@ManyToOne private Category category;
}
@Entity public class Category
{
}
不,我想查询属于所选项目的所有项目CriteriaQuery
。
List<Type> types = ...
List<Category> categories = ...
CriteriaBuilder cB = em.getCriteriaBuilder();
CriteriaQuery<MeisProject> cQ = cB.createQuery(Project.class);
Root<Project> project = cQ.from(Project.class);
cQ.where(cB.isTrue(project.get("type").in(types)));
cQ.select(project).distinct(true);
return em.createQuery(cQ).getResultList();
这很好,但是如何将类别添加到此查询中? 类别是类型的属性,我想查询所有项目
答案 0 :(得分:2)
就像你在JPQL中需要它们一样(如果查询是静态查询,我建议使用它,因为它更简单,更易读),你需要加入:
Join<Project, Type> type = project.join("type");
Join<Type, Category> category = type.join("category");
cQ.where(type.in(types), category.in(categories));
(未经测试)