sql >> Databasteknik >  >> RDS >> Mysql

JPA-fråga i flera tabeller med många-till-många-relation

Jag tror att din fråga kan vara fel, vilket kan vara orsaken till problemet.

Du använder för närvarande:

 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 vara att Medical_Service inte innehåller ett Hospital_id-fält (används i JOIN).

Om du är glad att använda inbyggda frågor kan du göra så här:

 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 inre SELECT får alla Hospital_id:s för sjukhus som erbjuder en nödtjänst. Det yttre valet väljer sedan alla sjukhus där Hospital_id finns i det inre SELECT (dvs de erbjuder en akuttjänst) men också bara de med postnummer 3000.

För att använda en inbyggd fråga skulle du göra något så här:

    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. vänster gå samman multiplicera värden

  2. Hur försäkrar man sig om att det inte finns något rastillstånd i MySQL-databasen när man ökar ett fält?

  3. Infoga data om antalet rader är större än 0 fungerar inte

  4. Att ställa in variabeln `server-id` i MySQL fungerar inte