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

onishi [E-MAIL ADDRESS DELETED]
2006年 5月 31日 (水) 16:59:07 JST


おおにしと申します。

現在、既存システムをSeasarに置換しつつ勉強をしています。

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          地区テーブル chiku
-----------------------   ----------------------
 PK 社員コード emp_no      PK 地区コード chiku_code
    社員名     emp_name       地区名     chiku_name
    地区コード chiku_code
------------------------------

-- DAO EmpDao.java -----------
public static final Class BEAN = EmpDto.class;
public static final String getEmp_ARGS = "chikuCode";

List getEmp(String chikuCode);
------------------------------

-- 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 -----------
SQL手動発行のためTABLEアノテーションなし
selectで指定されているもの
------------------------------


〜〜問題があるとき〜〜

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

-- DAO 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
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
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
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 --------
SQL手動発行のためTABLEアノテーションなし
selectで指定されているもの
------------------------------






Seasar-user メーリングリストの案内