[seasar-dotnet:463] Re: Relnoを指定したとき、データがなければNULLにする方法

kubo jazzflute @ mbn.nifty.com
2007年 2月 25日 (日) 21:37:16 JST


久保です。

> > 自分、これは仕様かと思っていたのですが...
> >
> > EntityにRELNOが指定されていてSQLのSelect句に結合先の列を含めた場合、
> > 結合先が存在していなくても結合先のEntityのInstanceが取得される。
> > (結合先の列を含めたからには結合先のEntityは取得される)
> >
> > Java版S2Daoでも同じ動作します。
> なるほど、指定したから取得される、というのは納得です。
> ただ、それだと結合先が存在していない場合と、たまたまそういうデータが存在していた場合の区別ができないのでは?
> #そもそもそんな状況が起きないのかもしれませんが・・・

自分も問題意識は持っていました。

今回のような、カージナリティが{1 : 0...1}の場合や
よくあるパターンの{N : 0...1}の場合(FKがNullable)において、
結合先が存在しないRecordの結合先PropertyがNullではなく
空っぽのEntityが帰ってくるので、
「Nullチェックをどこのタイミングでやればいいんだろう!?」
とプログラマは迷います。


2つ考え方があります。

<A>
結合先の値を表示するという画面の一覧などにおいては、
結合先が存在しない場合に、空っぽのEntityが合った方が
NullRefExceptionの心配なくObjectを扱うことができます。

但し、

<B>
夜間バッチなど(画面でもありえますが)においては、
結合先が存在するRecordと存在しないRecordを意識的に区別して
処理を行いたい場合に、どうIF文を書くべきか迷います。

  {1 : 0...1} → 結合先空っぽEntityのNotNull列の有り無し!?
  {N : 0...1} → 結合元EntityのFKのNull判定でOK


感覚的には、Nullが帰ってくる方が自然ですが、
「A」のようなこともあり、既に数多くのProjectで利用されているS2Daoの
仕様を簡単変えることは難しいのかなと思っています。
(少なくとも設定とかか!?)

ただ、こんな例もありますので

http://ml.seasar.org/archives/seasar-user/2006-May/005519.html
http://ml.seasar.org/archives/seasar-user/2006-June/005684.html

その必要性次第で前向きに展開できるかもしれません。
まずコミッタ間で意識あわせる必要ありますね。。。


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
kubo   <jazzflute @ mbn.nifty.com>
jflute <http://d.hatena.ne.jp/jflute>
株式会社ビルドシステム <http://www.buildsystem.co.jp>
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/




seasar-dotnet メーリングリストの案内