Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Consulta JPA em várias tabelas com relacionamento muitos para muitos


Acho que sua consulta pode estar errada, o que pode ser a causa do problema.

Você está usando atualmente:
 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

O problema pode ser que Medical_Service não contém um campo Hospital_id (usado no JOIN).

Se você quiser usar consultas nativas, poderá fazer isso:
 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')

O SELECT interno obtém todos os Hospital_id's para hospitais que oferecem um serviço de Emergência. A seleção externa seleciona todos os hospitais onde o Hospital_id está no SELECT interno (ou seja, eles oferecem um serviço de emergência), mas também apenas aqueles com um código postal de 3000.

Para usar uma consulta nativa, você faria algo assim:
    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();