我认为您的查询可能有误,这可能是问题的原因。
您当前正在使用:
SELECt h FROM Hospital h INNER JOIN Medical_Service m ON h.hospital_id = m.hospital_id WHERe h.Postpre = :postpre AND m.Medical_name = :medical
问题可能是Medical_Service不包含Hospital_id字段(在JOIN中使用)。
如果您愿意使用本机查询,则可以执行以下操作:
SELECt * FROM Hospital WHERe Postpre = 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的所有医院(即,它们提供紧急服务),但也会选择邮政编码为3000的医院。
要使用本机查询,您需要执行以下操作:
int postpre = 3000; String service = "Emergency"; StringBuilder sb = new StringBuilder(); sb.append("SELECT * FROM Hospital WHERe Postpre = "); sb.append(postpre); 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();


