Uploaded image for project: 'S2Dao'
  1. S2Dao
  2. DAO-4

[Seasar-user:3720]外部SQLで2テーブル以上の参照でSQLコメントを使用すると値が取得できない

XMLWordPrintable

    • Type: Icon: Bug Bug
    • Resolution: Won't Fix
    • Priority: Icon: Major Major
    • None
    • Affects Version/s: 1.0.34
    • Component/s: s2dao
    • None
    • Environment:
      WebSphere 5.1.2
      Oracle 8.1.7
      S2 2.3.8
      S2DAO 1.0.34

      SQLを外部ファイルに記述し、テーブルを2つ参照してSQLコメントを使用すると
      片方のテーブルが無視されてしまいます。

      ログを見る限りでは、SQLは問題なく吐き出されています。

      テーブルの構造がシンプルなものは
      SQLコメントを使用しても問題なく結果を取得できるのですが、
      問題のSQLを実行すると期待通りの結果が取得できません。
      SQLコメントなしで直で条件を指定すると問題ありません。

      SQLコメントの変数が予約語かと思って「abcd」と別のものにしましたが変わりませんでした。
      データベースに直接SQLを流すと期待通りの結果が返ってきます。

      どのようにすれば、問題なく結果が取得できるのでしょうか?

      DAO,DTOの記述の仕方が間違っているような気もするので、
      もし間違っていればご指摘お願いします。

      よろしくお願いします。

      以下コードです。

      – 環境 –
      WebSphere 5.1.2
      Oracle 8.1.7
      S2 2.3.8
      S2DAO 1.0.34

      ~~問題がないとき~~

      – テーブル ------------------

      社員テーブル emp
      PK 社員コード emp_no      
         社員名     emp_name    
         地区コード chiku_code
      
      地区テーブル chiku
      PK 地区コード chiku_code
         地区名     chiku_name
      

      DAO EmpDao.java

      EmpDao.java
      public static final Class BEAN = EmpDto.class;
      public static final String getEmp_ARGS = "chikuCode";
      List getEmp(String chikuCode);
      

      SQL EmpDao_getEmp.sql

      EmpDao_getEmp.sql
      select a.emp_no, b.chiku_code, b.chiku_name
      from emp a, chiku b
      where a.chiku_code = b.chiku_code
      and b.chiku_code = /*chikuCode*/'A'
      

      DTO EmpDto.java

      EmpDto.java
      SQL手動発行のためTABLEアノテーションなし
      selectで指定されているもの
      

      ~~問題があるとき~~

      テーブル

      就業明細 meisai
      PK 年         year       
      PK 月         month      
      PK 日         day        
      PK 社員コード emp_no     
         社員名     emp_name   
      
      カレンダー cal
      PK 地区コード chiku_code
      PK 年         year
      PK 月         month
      PK 日         day
         休日区分   hol_kbn
      

      DAO MeisaiDao.java

      MeisaiDao.java
      public static final Class BEAN = MeisaiDto.class;
      public static final String getMeisai_ARGS = "chikuCode";
      
      List getMeisai(String chikuCode);
      

      以下のSQLで

      /*chikuCode*/
      

      を'A'と直で指定すると問題なし

      SQL1 MeisaiDao_getMeisai.sql
      リストで取得したときのサイズは0

      MeisaiDao_getMeisai.sql
      select a.*, b.hol_kbn
      from meisai a, cal b
      where a.year = b.year
      and a.month = b.month
      and a.day = b.day
      and a.emp_no = '0001'
      and a.year = 2006
      and a.month = 4
      and b.chiku_code = /*chikuCode*/'A'
      

      SQL2 MeisaiDao_getMeisai.sql
      リストで取得したときのサイズは0

      MeisaiDao_getMeisai.sql
      select a.*, b.hol_kbn
      from meiai a left outer join cal b
           on a.year = b.year
           and a.month = b.month
           and a.day = b.day
      where a.emp_no = '0001'
      and a.year = 2006
      and a.month = 4
      and b.chiku_code = /*chikuCode*/'A'
      

      SQL3 MeisaiDao_getMeisai.sql
      リストで取得したときのサイズは30で、b.hol_kbnがnull

      MeisaiDao_getMeisai.sql
      select a.emp_no, b.hol_kbn
      from meisai a left outer join 
           (select year, month, day, hol_kbn from cal where chiku_code = /*chikuCode*/'A') b
           on a.year = b.year
           and a.month = b.month 
           and a.day = b.day
      where a.emp_no= '0001'
      and a.year = 2006
      and a.month = 4
      

      DTO MeisaiDto.java

      MeisaiDto.java
      SQL手動発行のためTABLEアノテーションなし
      selectで指定されているもの
      

            Assignee:
            Unassigned Unassigned
            Reporter:
            manhole manhole
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: