Java 不同级别上具有多个IN的JPA条件查询
我有这些(简化的)实体:Java 不同级别上具有多个IN的JPA条件查询,java,jpa,criteria-api,Java,Jpa,Criteria Api,我有这些(简化的)实体: @Entity public class Project { @ManyToOne private Type type; } @Entity public class Type { @ManyToOne private Category category; } @Entity public class Category { } 否我想用标准查询查询属于所选类型的所有项目 List<Type> types = ... List<Cate
@Entity public class Project
{
@ManyToOne private Type type;
}
@Entity public class Type
{
@ManyToOne private Category category;
}
@Entity public class Category
{
}
否我想用标准查询
查询属于所选类型的所有项目
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();
列表类型=。。。
列表类别=。。。
CriteriaBuilder cB=em.getCriteriaBuilder();
CriteriaQuery cQ=cB.createQuery(Project.class);
根项目=cQ.from(project.class);
cQ.where(cB.isTrue(project.get(“type”).in(types));
cQ.select(project).distinct(true);
返回em.createQuery(cQ.getResultList();
这很好,但是如何将类别添加到此查询中?类别是该类型的属性,我要查询所有项目
- 属于类型列表(在示例中工作)
- 并且属于类别列表中的类型(提出此问题的原因)
Join<Project, Type> type = project.join("type");
Join<Type, Category> category = type.join("category");
cQ.where(type.in(types), category.in(categories));
Join type=project.Join(“类型”);
连接类别=类型。连接(“类别”);
cQ.where(类型in(类型),类别in(类别));
(未测试)查询应该做什么?你没有说过。项目没有类别,所以它不可能是相似的。查询是否应该按类别进行更多限制?它是否应该接受属于给定类别的项目,即使它们不属于给定类型?我们猜不到。说得准确一点。对不起,这个问题不准确。更新:“属于类别列表中的类型”。类别是该类型的属性。我们不必关心类别是否不在给定的类型中。