Java JPA中具有多对多关系的三个联接表查询

Java JPA中具有多对多关系的三个联接表查询,java,mysql,sql,jpa,Java,Mysql,Sql,Jpa,有三个表:医院、医疗服务和语言服务, 医院可以提供医疗服务和语言服务。因此,存在两种多对多关系 现在我想按三个条件搜索医院:邮政编码、医疗和语言,如何编写此SQL。它应该类似于: SELECT h FROM Hospital h JOIN h.medicalService m JOIN h.languageService l WHERE h.postcode = :postCodeParameter AND m.medicalName = :medicalNameParameter AN

有三个表:
医院
医疗服务
语言服务
, 医院可以提供医疗服务和语言服务。因此,存在两种多对多关系


现在我想按三个条件搜索医院:邮政编码、医疗和语言,如何编写此SQL。

它应该类似于:

SELECT h 
FROM Hospital h JOIN h.medicalService m JOIN h.languageService l
WHERE h.postcode = :postCodeParameter 
AND m.medicalName = :medicalNameParameter 
AND l.languageName = :languageNameParameter
假设您的实体映射正确。
另外,
HM\u id
HL\u id
列是不必要的,它应该被加入主键。

我认为您的SQL可能看起来像这样:

SELECT * FROM Hospital WHERE Postcode = 3000 AND
Hospital_id IN
    (SELECT Hospital_id FROM Hospital_Medical hm
    INNER JOIN Medical_Service m ON hm.Medical_id = m.Medical_id
    where Medical_name = 'Emergency') AND
Hospital_id IN
(SELECT Hospital_id FROM Hospital_Language hl
    INNER JOIN Language_Service l ON hl.Language_id = l.Language_id
    where Language_name = 'English')

嗨,弗兰克,欢迎来到SO。如果您需要查询方面的帮助,请包含到目前为止所需的代码,请参阅,您刚才不是问了这个问题吗?这是JPQL格式,只有连接的主键才能以这种方式工作?