クエリが間違っている可能性があり、それが問題の原因である可能性があります。
現在使用しているもの:
SELECT h FROM Hospital h
INNER JOIN Medical_Service m ON h.hospital_id = m.hospital_id
WHERE h.Postcode = :postcode AND m.Medical_name = :medical
問題は、Medical_ServiceにHospital_idフィールド(JOINで使用)が含まれていないことである可能性があります。
ネイティブクエリを使用することに満足している場合は、次のように実行できます。
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')
内部SELECTは、緊急サービスを提供する病院のすべてのHospital_idを取得します。次に、外側のselectは、Hospital_idが内側のSELECTにあるすべての病院を選択します(つまり、緊急サービスを提供します)が、郵便番号が3000の病院のみも選択します。
ネイティブクエリを使用するには、次のようにします。
int postcode = 3000;
String service = "Emergency";
StringBuilder sb = new StringBuilder();
sb.append("SELECT * FROM Hospital WHERE Postcode = ");
sb.append(postcode);
sb.append("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 = '");
sb.append(service);
sb.append("')");
String queryString = sb.toString();
Query query = em.createNativeQuery(queryString);
List<Hospital> result = query.getResultList();