gpt4 book ai didi

java - JPA Criteria 查询在不同级别上具有多个 IN

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

我有这些(简化的)实体:

@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();

这工作正常,但如何将类别添加到此查询中? 类别类型的属性,我想查询所有项目

  • 属于类型列表(在示例中工作)
  • 并且属于类别列表中的某个类型(此问题的原因)

最佳答案

正如您在 JPQL 中需要它们一样(如果查询是静态查询,我建议使用它们,因为它更简单且更具可读性),您需要联接:

Join<Project, Type> type = project.join("type");
Join<Type, Category> category = type.join("category");
cQ.where(type.in(types), category.in(categories));

(未测试)

关于java - JPA Criteria 查询在不同级别上具有多个 IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28123631/

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