Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie JPA w wielu tabelach z relacją wiele do wielu

Myślę, że Twoje zapytanie może być błędne, co może być przyczyną problemu.

Obecnie używasz:

 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

Problem może polegać na tym, że Medical_Service nie zawiera pola Hospital_id (używanego w JOIN).

Jeśli chcesz używać zapytań natywnych, możesz to zrobić:

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

Wewnętrzny SELECT pobiera wszystkie identyfikatory Hospital_id dla szpitali, które oferują usługi ratunkowe. Zewnętrzna selekcja następnie wybiera wszystkie szpitale, w których Hospital_id znajduje się w wewnętrznej SELECT (tj. oferują usługę Emergency), ale także tylko te z kodem pocztowym 3000.

Aby użyć natywnego zapytania, wykonaj coś takiego:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyłącz logowanie root w phpMyAdmin

  2. Implementacja bazy danych najczęściej oglądanych funkcji

  3. MySQL:Dlaczego DELETE bardziej obciąża procesor niż INSERT?

  4. Jak używać podzapytania dla opcji dbtable w źródle danych jdbc?

  5. Pobierz sumę kolumn i użyj do obliczenia procentu całości (mySQL)