有一个由 5 个实体组成的简单对象模型:
- Company
- 组织
- Address
- Club
- Group
公司与单个组织相关联。 (团体和俱乐部也与单个组织相关联 - 它们是单向的,这意味着组织不包含对其所有者的引用)。一个组织可以有 0 个或多个地址。
子查询可用于基于特定邮政编码(地址的属性)访问 Company 对象。
下面是一个 JPQL 查询,可以访问具有特定邮政编码的公司。
@Query("从公司 p、组织 org 中选择 p,其中
(p.organization = org.id) 且存在(从地址广告中选择 1,其中
邮政编码 = :邮政编码 和 ad.organization = org.id)")
如何使用 JPA Criteria API 完成同样的事情?
这将使用内部联接选择提供邮政编码的公司,这是您想要的吗?
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;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)