2017-08-29 1 views
-1

J'ai deux entités, Société:Pour un grand nombre de requêtes 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; 

et CompanyRelation:

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

@Id 
@GeneratedValue 
private Long id; 

@OneToOne 
private Company relatedCompany; 

Comment puis-je construire hql requête pour obtenir l'aide CompanyRelation COMPANYID et relatedCompanyId? Quelque chose comme ça:

CompanyRelation findByCompanyIds(Long companyId, Long relatedCompanyId); 
+0

est là ac La clé étrangère company_id sur la table company_relations? – dimitrisli

+0

Voilà le point. : D Il est généré sur la table, mais il n'est pas disponible dans le code. – Helosze

+2

Je crois que la deuxième annotation est @ManyToOne! N'est-ce pas? –

Répondre

1

Commençons par la suggestion. Based on this article Je suggère que vous associez votre association @OneToMany bidirectionnellement comme ci-dessous:

@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; 

//.. 

} 

Essentiellement laisser le ToMany côté possède l'association comme il est dans la base de données ainsi (company_id colonne de clé étrangère sur les company_relations Table)

dans cet esprit, vous pouvez chercher un CompanyRelation sur la base Id entreprise avec le ci-dessous JPQL:

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