2017-08-29 33 views
-1

許多查詢我有兩個實體,公司名稱:一個要在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; 

和CompanyRelation:

@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); 
+0

有交流company_relations表上的ompany_id外鍵? – dimitrisli

+0

這就是要點。 :D它在表格上生成,但在代碼中不可用。 – Helosze

+2

我相信第二個註釋是@ManyToOne!不是嗎? –

回答

1

首先讓我從這個建議開始。 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; 

//.. 

} 

本質上讓一對多方自己的關聯,因爲它是在DB以及對company_relations(COMPANY_ID外鍵列表)

考慮到這一點,你可以獲取基於公司標識與下面JPQL一個CompanyRelation:

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