HQL中的一对多查询

One To Many query in HQL

我有两个实体,公司:

@Entity
@Table(name = "companies")
public class Company {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "company_id")
private List<CompanyRelation> companyRelations;

private String name;

@OneToOne(cascade = CascadeType.ALL)
private Address address;

与公司关系:

@Entity
@Table(name = "company_relations")
public class CompanyRelation {

@Id
@GeneratedValue
private Long id;

@OneToOne
private Company relatedCompany;

我如何构建 hql 查询以使用 companyId 和 relatedCompanyId 获取 CompanyRelation?类似的东西:

CompanyRelation findByCompanyIds(Long companyId, Long relatedCompanyId);

首先让我从建议开始。 Based on this article 我建议您双向映射 @OneToMany 关联,如下所示:

@Entity
@Table(name = "companies")
public class Company {
   //..
   @OneToMany(mappedBy = "relatedCompany", cascade = CascadeType.ALL)
   private List<CompanyRelation> companyRelations = new ArrayList<>();
   //..
}

@Entity
@Table(name = "company_relations")
public class CompanyRelation {

//..

   @ManyToOne
   @JoinColumn(name = "company_id")
   private Company relatedCompany;

//..

}

基本上让 ToMany 方拥有关联,因为它在数据库中也是如此(company_id company_relations [=25] 上的外键列=])

考虑到这一点,您可以使用以下 JPQL 根据公司 ID 获取 CompanyRelation:

List<CompanyRelation> companyRelations = entityManager.createQuery(
"select cr from CompanyRelation cr where cr.relatedCompany.id = :companyId", CompanyRelation.class)
.setParameter("companyId", myCompanyId).getResultList();