[Seasar-user:16197] [S2Dao]Re3: N:0..1マッピングについて

Yutaka Nishino [E-MAIL ADDRESS DELETED]
2008年 10月 31日 (金) 10:37:36 JST


お世話になっております。
西野と申します。

以前に「[Seasar-user:14866] [S2Dao]N:0..1マッピングについて」という件で
質問させて頂いたのですが、もう一点確認させて頂きたい事があります。

N:1マッピングでN側にキーの値が入っているが、1側のテーブルに対応するデータが存在しなく、
S2Daoで自動生成したSQLでN:1マッピングを利用してデータを取得した場合、DTOの1側のインスタンスが生成されます。
これは仕様でしょうか?

※参考:「[Seasar-user:14866] [S2Dao]N:0..1マッピングについて」と異なる点は以下の通りです。
  ・[Seasar-user:14866]は、N側のマッピングの為のカラムにnullを入れていましたが、
   今回はそのカラムに値を入れ、N側の表に対応するデータが存在しない状況です。

(現象確認方法)
s2-dao-1.0.49に付属のs2-dao-examplesを利用。
1.HSQLを立ち上げます。
2.HSQL Database Managerで1側の表(DEPT)のデータを全部DELETE。
 DELETE FROM DEPT;
3.デバッグでexamples.dao.EmployeeAutoDaoClient.main(String[])の
 examples.dao.EmployeeAutoDao.getEmployeeByEmpno(int)の呼び出しでブレークポイントを設定。
4.examples.dao.EmployeeAutoDaoClientTest.testNoException()を実行し、
 examples.dao.EmployeeAutoDao.getEmployeeByEmpno(int)の
 戻り値と自動生成され発行されているSQLを確認。
 Employee(N側)のdepartment(1側)プロパティにキーのみ値がセットされたインスタンスが設定されています。
 ・発行されているSQL
 SELECT EMP.tstamp, EMP.empno, EMP.ename, EMP.job, EMP.mgr, EMP.hiredate, EMP.sal, EMP.comm, EMP.deptno, department.dname AS dname_0, department.deptno AS deptno_0, department.loc AS loc_0, department.versionno AS versionno_0 FROM EMP LEFT OUTER JOIN DEPT department ON EMP.deptno = department.deptno WHERE  EMP.empno = 7788
 ・戻り値(EmployeeのToString())
 7788, SCOTT, ANALYST, 7566, 1982-12-09 00:00:00.0, 3000.0, null, 10, 2008-10-30 22:26:44.331 {10, null, null, 0}

(環境)※[Seasar-user:14866]で質問した時と環境が変わっています。
OS: WindowsXP SP3
S2Container: 2.3.23
S2Dao: 1.0.49
DB: HSQLDB server 1.8.0
JDK: jdk1.5.0_11

よろしくお願い致します。


> お世話になっております。
> 西野です。
> 
>> コミッタ間で話し合い、
>> 1側のデータが存在しない場合はインスタンスを生成しないの
>> が正しいという結論になりました。
>>
>> 修正してSNAPSHOTを作成したので確認していただけないでしょうか?
>> よろしくお願いします。
>>
>> http://maven.seasar.org/maven2-snapshot/org/seasar/dao/s2-dao/1.0.49-SNAPSHOT/s2-dao-1.0.49-20080702.135817-3.jar
>> http://maven.seasar.org/maven2-snapshot/org/seasar/dao/s2-dao-tiger/1.0.49-SNAPSHOT/s2-dao-tiger-1.0.49-20080702.135905-2.jar
> (環境)
> S2Container: 2.3.23
> S2Dao: 1.0.49-SNAPSHOT/s2-dao-1.0.49-20080702.135817-3.jar
> DB: HSQLDB server 1.7.3
> 上記環境で確認しましたが、1側のインスタンスがnullとなっている事を確認できました。
> 
> ご対応ありがとうございました。
> 
> 
> Toshihiro Nakamura さんは書きました:
>> 中村(taedium)です。
>>
>>> (質問)
>>> S2DaoでN:1マッピングを用いて関連する1側のデータを取得しようと考えています。
>>> S2DaoではN:1の1側が存在しないようなケース(N:0..1)はサポートしていますでしょうか?
>>> このケースを実際に試してみたところ、N側のデータをListで取得した場合と、
>>> 1件のみ取得した場合で1側のデータが存在しない場合の挙動が異なっている為、
>>> 質問させて頂きました。
>>> できましたら、1件取得の場合も1側のインスタンスが生成されないようにして頂けないでしょうか?
>> コミッタ間で話し合い、
>> 1側のデータが存在しない場合はインスタンスを生成しないの
>> が正しいという結論になりました。
>>
>> 修正してSNAPSHOTを作成したので確認していただけないでしょうか?
>> よろしくお願いします。
>>
>> http://maven.seasar.org/maven2-snapshot/org/seasar/dao/s2-dao/1.0.49-SNAPSHOT/s2-dao-1.0.49-20080702.135817-3.jar
>> http://maven.seasar.org/maven2-snapshot/org/seasar/dao/s2-dao-tiger/1.0.49-SNAPSHOT/s2-dao-tiger-1.0.49-20080702.135905-2.jar
> 
> 
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


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