sql >> Database teknologi >  >> RDS >> Mysql

JPA-forespørgsel i flere tabeller med mange-til-mange-relation

Jeg tror, ​​din forespørgsel kan være forkert, hvilket kan være årsagen til problemet.

Du bruger i øjeblikket:

 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
 

Problemet kan være, at Medical_Service ikke indeholder et Hospital_id-felt (bruges i JOIN).

Hvis du er glad for at bruge indbyggede forespørgsler, kan du gøre dette:

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

Den indre SELECT får alle Hospital_id'erne for hospitaler, der tilbyder en nødhjælpstjeneste. Det ydre udvalg vælger derefter alle hospitaler, hvor Hospital_id er i det indre SELECT (dvs. de tilbyder en nødtjeneste), men også kun dem med et postnummer på 3000.

For at bruge en indbygget forespørgsel skal du gøre noget som dette:

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. Python, Brew og MySQLdb

  2. Glassfish opretter ikke JDBC-ressourcer

  3. PHP gemmer adgangskode i cookie

  4. Rails udefineret metode til ActiveRecord_Associations_CollectionProxy