S2Daoで遊ぶ

だいぶん落ち着いて来たので、自社に帰ってすぐ走れるように、seasarで遊ぶ。もう知らんよ、今の案件。大手企業子会社謹製フレームワークはこりごり。

題材は過去案件の書店向け書籍注文ガシガシ受付システムである。Amazonみたいなのじゃなくて、もっと業務寄りの、バシバシ書籍コードで入力してまとめてドーンって奴。

以下、明日のためにメモ。

データモデルのリレーションのオブジェクト化

s2jsf-exampleを見つつ、がしがしS2TestCaseでEntity-Dto-Daoのテストして、こりゃ楽ちんだと感涙。特に書籍-出版社みたいな外部結合で、勝手に結合先オブジェクト作って突っ込んでくれるのは、ああこれだよ求めてたのはと云う塩梅。

ただ、exampleではリレーションの自動インジェクション、やってないんだよな。Entityを継承した表示用DTOで、書籍クラスに出版社名称プロパティ作ってそこにJOINしたSQLの結果を突っ込んでるだけ。うーん、まあオブジェクト側でリレーションを美しく構築してもあまり良い事無い気もするし、これでいいのかもなあ。基本的にDOA野郎だから、俺。

大体まだ書籍-出版社なんてかわいいのは良いとして、仕訳-売上-出荷-受注-顧客-倉庫-商品とか際限なく拡がってったらもう難儀だし。こちとらコンピュータサイエンスやってる訳じゃないんだから、仕事、仕事。でも面白い、自動インジェクション。

Entityクラスの数値項目プロパティ

exampleのEntityクラスの内、数値項目の型がプリミティブ型じゃなくて参照型になってるんだけど、なんでだか判らないので取りあえずプリミティブ型で書いて動いた。バンザイ。

と思ったら、SQLをファイル外だしにして、コメントで/*IF dto.id != null*/とやった場合に、プリミティブ型だもんで勝手に0で初期化しやがりまして、IF文にひっかからないんだこれが。そうか、そう云う事か。

教訓。Entityクラスの数値項目は全部参照型で書きましょう。

但し、排他制御用のversionNoは、exampleでもint型になってて、まあこれは逆にNULLになると困るしな、S2Daoの方で勝手にいじくるところなんで、exampleの通りにint型のままにしておいた。突然ここだけプリミティブ型になるんだけど、versionNoなんてのは業務ドメインとは全く関係の無いシステム要件であるからして、明確に違いが出てそれはそれでいいんじゃないかなーと自分を納得させました。Integer型にした時の動きは試してません。面倒だし。