[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 メーリングリストの案内