मुझे लगता है कि आपकी क्वेरी गलत हो सकती है, जो समस्या का कारण हो सकती है।
आप वर्तमान में उपयोग कर रहे हैं:
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 फ़ील्ड नहीं है (जॉइन में प्रयुक्त)।
यदि आप स्थानीय प्रश्नों का उपयोग करके खुश हैं तो आप यह कर सकते हैं:
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')
आंतरिक चयन उन अस्पतालों के लिए सभी Hospital_id प्राप्त करता है जो आपातकालीन सेवा प्रदान करते हैं। बाहरी चयन तब उन सभी अस्पतालों का चयन करता है जहां Hospital_id आंतरिक चयन में है (यानी वे एक आपातकालीन सेवा प्रदान करते हैं) लेकिन केवल 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();