sql >> Base de Datos >  >> RDS >> Mysql

Consulta JPA en varias tablas con una relación de muchos a muchos

Creo que su consulta podría ser incorrecta, lo que podría ser la causa del problema.

Actualmente estás usando:

 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

El problema podría ser que Medical_Service no contenga un campo Hospital_id (utilizado en JOIN).

Si está feliz de usar consultas nativas, puede hacer esto:

 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')

El SELECT interno obtiene todos los Hospital_id de los hospitales que ofrecen un servicio de Emergencia. La selección externa luego selecciona todos los hospitales donde Hospital_id está en la SELECCIÓN interna (es decir, ofrecen un servicio de emergencia), pero también solo aquellos con un código postal de 3000.

Para usar una consulta nativa, haría algo como esto:

    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();