Mysql
 sql >> Datenbank >  >> RDS >> Mysql

JPA-Abfrage in mehreren Tabellen mit Viele-zu-Viele-Beziehung

Ich denke, Ihre Abfrage könnte falsch sein, was die Ursache des Problems sein könnte.

Sie verwenden derzeit:

 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

Das Problem könnte darin bestehen, dass Medical_Service kein Hospital_id-Feld enthält (das im JOIN verwendet wird).

Wenn Sie gerne native Abfragen verwenden, können Sie Folgendes tun:

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

Das innere SELECT erhält alle Hospital_ids für Krankenhäuser, die einen Notfalldienst anbieten. Die äußere Auswahl wählt dann alle Krankenhäuser aus, bei denen die Krankenhaus_ID im inneren SELECT steht (d. h. sie bieten einen Notdienst an), aber auch nur diejenigen mit einer Postleitzahl von 3000.

Um eine native Abfrage zu verwenden, würden Sie etwa so vorgehen:

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