0

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

  1. 公司
  2. 组织
  3. 地址
  4. 俱乐部
  5. 团体

节目公司、俱乐部和团体都与组织相关联 在此处输入图像描述

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

子查询可用于根据特定邮政编码访问公司对象,邮政编码是地址的一个属性。这是一个 JPQL 查询,可以使用特定的邮政编码访问这些公司。

@Query("select p from Company p, Organization org where (p.organization = org.id) and exists (select 1 from Address ad where zipcode = :zipcode and ad.organization = org.id)")

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

4

1 回答 1

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;
于 2012-06-04T13:13:28.110 回答