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();
我有两个实体,公司:
@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();