ちょっとややこしい話ですが...
SpecifyColumnって機能があります。
まず、これがわからないとこの話意味がわからないかと。
ConditionBeanでの検索は、
「基点テーブルに対して、何のあ関連テーブルを取得するか?」
っていう感じで、SetupSelectをしますが、
基点テーブル、および、SetupSelectされた関連テーブルの、
すべてのカラムが取得対象になります。
つまり、SQLのselect句にすべてのカラムが列挙されます。
テーブルは選択式だけど、
カラムはデフォルトで全部列挙でハイブリッドな感じ。
すべての検索でカラムまで全部指定していると、
それはそれで開発効率を下げてしまうからです。
(あれ取ってる?取ってないっけ?だらけになる)
ただ、SpecifyColumnを使うと、
select句に列挙するカラムを指定することができて、
「このカラムとこのカラムだけ欲しいー」
ってのが実現できます。
パフォーマンス考慮のためですね。
SpecifyColumnを知らない方はこちらへ
=> SpecifyColumn | DBFlute
memberBhv.selectList(cb -> {
cb.setupSelect_MemberStatus();
cb.specify().columnMemberStatusName();
...
}).forEach(member -> {
member.getMemberStatus().alwaysPresent(status -> {
... = status.getMemberStatusName();
... = status.getDisplayOrder();
});
});
絞ったけどgetしたらnull
ということで、SpecifyColumn を使うと、
やっぱり「あれ取ってる?取ってないっけ?」に
なってしまう可能性があります。
Entity から get すると null が戻ってきます。
これは、データがないから null なのか?
それとも、SpecifyColumnを使ってSpecifyされてない
から null なのか?
ぱっとわからずにデバッグに時間が取られてしまう
可能性があります。だからまあ、デフォルトでは、
Entityのカラムはすべて充足させているわけです。
でーきたー
できました。
昨今の缶詰生活が実りました。
SpecifyColumnを使っているテーブルで、
SpecifyされていないカラムをEntityでgetしたら、
例外!
エラーメッセージは相変わらずド派手です。
memberBhv.selectList(cb -> {
cb.setupSelect_MemberStatus();
cb.specify().columnMemberStatusName();
...
}).forEach(member -> {
member.getMemberStatus().alwaysPresent(status -> {
... = status.getMemberStatusName();
... = status.getDisplayOrder();
});
});
デフォルトにした
で、これをデフォルトにするかどうかを迷いました。
EntityからWeb用のBeanへの詰め替え処理などを、
再利用しているような場合に...
あっちの検索では通るけど、あっちからだと落ちるみたいな。
getterを呼んで null じゃなかったら詰め替えるみたいな。
そういう可能性がなきにしもあらずです。
だからこそ、1.0.xでは絶対にデフォルトONはできない。
なので、デフォルトにするなら今しかない。
新しいプログラムでの心配に集約できますが、
そのケースで実装ができないのはちょっと不便ではあります。
ですが、ConditionBeanの検索時にオプションでOFFにできて、
エラーメッセージがド派手であれば、いざそういう実装しようと
思った方も、うまく回避でしょうと。
やはり、Strict な Java8 の DBFlute なので、
ここは頂いたアイディアをしっかり活用したいなと思います。
ちなみに、これで Scala 版で心配していた、
「SpecifyされてないのにOptionじゃなくてnull戻っちゃう問題」
も、そもそもgetしたら例外ということで解決ができました。
もちろん、dfpropで全体的にOFFにすることもできます。
littleAdjustmentMap.dfprop にて、
isNonSpecifiedColumnAccessAllowed = true
にすれば、NonSpecified な Column ヘの Access が、
Allowed です。(許されます)
...
...
って、実現はできたけど厳密テストはこれからなので、
まだ何かあるかもですけど(^^
…
…
【追記】
1.0.x系でも入りましたー!
// DBFlute-1.0.5M Released
http://d.hatena.ne.jp/jflute/20141031/release105m