Ik denk dat je vraag misschien verkeerd is, wat de oorzaak van het probleem kan zijn.
Je gebruikt momenteel:
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
Het probleem kan zijn dat Medical_Service geen veld Hospital_id bevat (gebruikt in de JOIN).
Als u graag native queries gebruikt, kunt u dit doen:
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')
De binnenste SELECT krijgt alle Hospital_id's voor ziekenhuizen die een spoeddienst aanbieden. De buitenste select selecteert vervolgens alle ziekenhuizen waar de Hospital_id in de binnenste SELECT staat (d.w.z. ze bieden een Emergency service), maar ook alleen die met een postcode van 3000.
Om een native query te gebruiken, zou je zoiets als dit doen:
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();