拥有一个由5个实体组成的简单对象模型:
公司与单个组织相关联。 (组和俱乐部也与单一组织相关联 - 这些是单向的,这意味着组织不包含对其所有者的引用)。组织可能有0个或更多地址。
子查询可用于根据特定邮政编码访问公司对象,该邮政编码是地址的属性。 这是一个JPQL查询,可以访问具有特定邮政编码的公司。
@Query(“从公司p中选择p,组织组织在哪里 (p.organization = org.id)并且存在(从地址广告中选择1,其中 zipcode =:zipcode和ad.organization = org.id)“)
如何使用JPA Criteria API完成同样的事情?
答案 0 :(得分:0)
这将选择使用内部联接提供邮政编码的公司,这是您想要的吗?
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));
如果公司没有财产,您将无法通过组织访问公司。如果您的公司有对组织的引用,那么您可以将单向映射到双向映射,将以下代码添加到组织类:
@OneToOne(mappedBy="organization") //Providing the name of property in Company
private Company company;