Мисля, че заявката ви може да е грешна, което може да е причината за проблема.
В момента използвате:
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 за болници, които предлагат спешна помощ. След това външният избор избира всички болници, в които 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();