[seasar-s2dao-dev:73] Re: Next S2Dao
kubo
jazzflute @ mbn.nifty.com
2006年 12月 22日 (金) 11:41:06 JST
久保です。
> > SQL一発どりのOneToManyは、テーブルに1つなら
> > まだ良いのですが、複数あると、取得するデータが
> > 膨大になってしまうのでリスクが大きい気がします。
はい。
これは確かにそうですね。
自分は「テーブルに1つ」をイメージしています。
> 必要なときに、Daoのメソッドを呼び出すでは、
> 足りないのでしょうか。
バッチならあまり問題ないとか思います。
(無論状況によりますが)
Access数の多いComsumer向けWEBサイトなどで、
1リクエストで一発SQLか、二発SQLか迷うところです。
(LazyLoadみたいに親が10件あったら10回子供取得SQL発行は論外)
ただでさえ、全く関連しないテーブルもSelect掛けないと
いけない上に、せっかく関連してるテーブルが二発SQLは
少しためらいます。
当然、関連無しで平坦に取得はできますが、その場合は、
アプリケーションがコントロールブレイク処理などで
自分で展開しなければなりません。
(SVFなどの帳票ツールなどで自動展開する機能がありますが)
自分は、
A. DBは関連(1:n)で保存されている。
↓
B. SQLでは、平坦に取得する。
↓
C. 画面で関連(1:n)に展開する。※ここでは“DBと同じ持ち方の(1:n)”
というのがちょっとどうなんだろうって悩みます。
もちろん、DBでの持ち方と画面で表示する形式が必ずしも
一致するとは限らないのでVIEWがある程度編集を掛けることは
多いですが、DBの持ち方と全く同じというパターンもかなり多いです。
そのときは、SQLで取得した時点で{1:n}形式だと非常に楽になります。
ただ、確かにキリがありません。
大谷さんが仰るように「あれもこれもと夢は広がりますが、」
という感じで、どっかで線引きしないといけないですね。
そういう思想の場合はHibernateを使えとなるのでしょうか...
やはり、Next S2Dao は、「C」に関しては、
アプリ側(or 別の便利ツール)がやるものとお考えですか?
#
# もし、そういう割り切りなのであれば、「展開を簡単にするツール」に
# 力を入れていけばいいのかなって、今書きながら納得しています。
# 自分が作成してるツールで「C」の処理を自動生成するものを
# 実装中だったりしてました。
#
> ・JavaBeans(DTO)にJoinアノテーションを指定できるようにする。
> @Join("dept")
> public class EmployeeDto extends Employee {
> private String deptName;
> private String loc;
> ...
> }
ちょっと技術詳細に話が変わりますが(こっちが本題!?)、
今まで、Employee側(Entityの本体)で、RELKEYなどで、
結合先がEntityで静的になってしまっていたので、
上記の仕様はかなり利便性がUPする思います。
複数のテーブルをJOINして、結合先の列を取得したい場合は、
どうイメージされていますでしょうか?
(例えば、「@Join("dept, dept2, dept3...")」とか)
--
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
kubo <jazzflute @ mbn.nifty.com>
jflute <http://d.hatena.ne.jp/jflute>
株式会社ビルドシステム <http://www.buildsystem.co.jp>
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
seasar-s2dao-dev メーリングリストの案内