Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête JPA dans plusieurs tables avec une relation plusieurs à plusieurs

Je pense que votre requête est peut-être erronée, ce qui pourrait être la cause du problème.

Vous utilisez actuellement :

 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

Le problème peut être que Medical_Service ne contient pas de champ Hospital_id (utilisé dans le JOIN).

Si vous souhaitez utiliser des requêtes natives, vous pouvez procéder comme suit :

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

Le SELECT interne obtient tous les Hospital_id pour les hôpitaux qui offrent un service d'urgence. La sélection externe sélectionne ensuite tous les hôpitaux où Hospital_id se trouve dans le SELECT interne (c'est-à-dire qu'ils offrent un service d'urgence), mais également uniquement ceux dont le code postal est 3000.

Pour utiliser une requête native, procédez comme suit :

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