[DAO-4] [Seasar-user:3720]外部SQLで2テーブル以上の参照でSQLコメントを使用すると値が取得できない Created: 2006-05-31  Updated: 2007-08-01  Resolved: 2007-08-01

Status: Closed
Project: S2Dao
Component/s: s2dao
Affects Version/s: 1.0.34
Fix Version/s: None

Type: Bug Priority: Major
Reporter: manhole Assignee: Unassigned
Resolution: Won't Fix Votes: 0
Labels: None
Environment:

WebSphere 5.1.2
Oracle 8.1.7
S2 2.3.8
S2DAO 1.0.34



 Description   

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で指定されているもの


 Comments   
Comment by taedium [ 2007-08-01 ]

S2Daoの問題ではないのでクローズします。
FAQに記述しました。

Comment by taedium [ 2007-07-31 ]

chiku_codeを長さが2以上のCHAR型にしたら再現しました。

Comment by taedium [ 2007-07-29 ]

SQLコメントを使ったパラメータのバインドが正常に機能しないという解釈で試したのですが、再現できませんでした。
データベースにはOracle 10g Express Editionを使いました。

Generated at Fri Apr 19 15:52:34 JST 2024 using Jira 9.15.0#9150000-sha1:9ead8528714127d8cfabf2446010d7e62c0a195c.