如何将带有子查询的JPQL转换为与API等价的条件?

如何将带有子查询的JPQL转换为与API等价的条件?,api,jpa,subquery,criteria,Api,Jpa,Subquery,Criteria,具有由5个实体组成的简单对象模型: 公司 组织 住址 俱乐部 组 公司与单个组织关联。团体和俱乐部也与单个组织关联——它们是单向的,这意味着该组织不包含对其所有者的引用。一个组织可能有0个或多个地址 子查询可用于基于特定zipcode(地址的属性)访问公司对象。 这里是一个JPQL查询,可以使用特定的zipcode访问这些公司 @查询从公司p、组织机构p中选择p p、 organization=org.id且存在从地址ad中选择1 zipcode=:zipcode和ad.organizati

具有由5个实体组成的简单对象模型:

公司 组织 住址 俱乐部 组

公司与单个组织关联。团体和俱乐部也与单个组织关联——它们是单向的,这意味着该组织不包含对其所有者的引用。一个组织可能有0个或多个地址

子查询可用于基于特定zipcode(地址的属性)访问公司对象。 这里是一个JPQL查询,可以使用特定的zipcode访问这些公司

@查询从公司p、组织机构p中选择p p、 organization=org.id且存在从地址ad中选择1 zipcode=:zipcode和ad.organization=org.id


如何使用JPA Criteria API完成同样的事情?

这将选择使用内部连接提供zipcode的公司,这是您想要的吗

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Company> cq = cb.createQuery(Company.class);
Root<Organization> root = cq.from(Organization.class);
Join<Organization, Address> adr = root.join("addresses");
cq.select(root.get("company"));
cq.where(cb.equal(adr.get("zipcode"), zipcode));

JMelnik-感谢您的回复,当我运行代码时,下面显示:方法selectionjmelnik,您能在spring数据规范中做到这一点吗?org.springframework.data.jpa.domain.specification抱歉,我不知道spring数据,请尝试自己将此示例应用到您的案例中。
@OneToOne(mappedBy="organization") //Providing the name of property in Company 
private Company company;