sql >> データベース >  >> RDS >> Mysql

多対多の関係を持つ複数のテーブルでのJPAクエリ

    クエリが間違っている可能性があり、それが問題の原因である可能性があります。

    現在使用しているもの:

     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
    

    問題は、Medical_ServiceにHospital_idフィールド(JOINで使用)が含まれていないことである可能性があります。

    ネイティブクエリを使用することに満足している場合は、次のように実行できます。

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

    内部SELECTは、緊急サービスを提供する病院のすべてのHospital_idを取得します。次に、外側のselectは、Hospital_idが内側のSELECTにあるすべての病院を選択します(つまり、緊急サービスを提供します)が、郵便番号が3000の病院のみも選択します。

    ネイティブクエリを使用するには、次のようにします。

        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. PHPのnull値はMySQLのnull値と同じではありませんか?

    2. データベース内の同じテーブルと複数のテーブルに類似したエンティティを保存する

    3. JPAがConverterクラスで列を更新しない

    4. Railsでの複数のデータベース接続