[seasar-dotnet:2296] Re: [DBFlute.NET]OutsideSQLでの総件数取得
[E-MAIL ADDRESS DELETED]
[E-MAIL ADDRESS DELETED]
2013年 6月 14日 (金) 16:04:16 JST
久保 様
uparrowです。
お教えいただいた、もとのPmbを継承し、IsPagingプロパティがfalseを返すことで
目的の動作を実現できました。
ありがとうございました。
> 久保(jflute)です
>
> uparrowさん、こんばんは
>
> ささっとJava試したのですが、要領は同じです。
> ページングのPmbのExクラスで IsPaging をオーバーライドして、
> 問答無用で false を戻すようにして、
> outsideSql().entityHandling().selectEntity() で Integer.class を
> 戻り値に指定すれば、カウントを取得することができます。
>
> // Exクラス
> public class PurchaseMaxPriceMemberPmb extends BsPurchaseMaxPriceMemberPmb {
> @Override
> public boolean isPaging() {
> return false;
> }
> }
>
> // 呼び出し
> PurchaseMaxPriceMemberPmb pmb = new PurchaseMaxPriceMemberPmb();
> memberBhv.outsideSql().entityHandling()
> .selectEntity(MemberBhv.PATH_selectPurchaseMaxPriceMember, pmb,
> Integer.class);
>
> で、Exクラスにベタで書いちゃったらもちろん、
> 通常のページングができなくなってしまいますので、
> Exクラスで「問答無用カウント検索モード」プロパティを作成して、
> 呼び出し側で選べるようにしておくと良いと思います。
>
> public class PurchaseMaxPriceMemberPmb extends BsPurchaseMaxPriceMemberPmb {
> protected boolean _問答無用カウント検索モード;
>
> public void prepare問答無用カウント検索モード() {
> _問答無用カウント検索モード = true;
> }
>
> @Override
> public boolean isPaging() {
> return _問答無用カウント検索モード ? false : super.isPaging();
> }
> }
>
>
> ...
> ......
> っって、ここまで書いておいて、
> そっか継承モデルじゃなくって partial だったから、
> オーバーライドできないですねー(><。
> なので、カウント検索用のPmbクラスを手動作成して、
> PurchaseMaxPriceMemberPmbを継承して
> オーバーライドすると良いでしょう。
> (したら、変な名前のプロパティは不要ですね)
>
>
> ※今後もpartialしなきゃ良かったとずっと言い続けそう...
>
>
> 2013/6/13 <uparrow @ nifty.com>:
> > 志村さん
> > uparrowです。
> >
> > アドバイスありがとうございます。
> > 通常のカウントであれば、こちらの方法を使っているのですが、
> > 複雑な問い合わせのため、OutsideSQLを利用した際のカウントの方法が
> > 知りたかったのです。
> >
> > よろしくお願いします。
> >
> >> 志村です。
> >>
> >> http://dbflute.seasar.org/ja/manual/function/ormapper/behavior/select/selectcount.html
> >>
> >> で良いのでは。
> >>
> >>
> >> 2013年6月13日 9:48 <uparrow @ nifty.com>:
> >>
> >> > uparrowと申します。
> >> >
> >> > OutsideSQLを利用する場面で
> >> > ページング検索を行う他に、同じSQLの総件数のみ取得したい場面があります。
> >> >
> >> > ページング検索用にSQLファイルを作成
> >> > 総件数取得用にSQLファイルを作成しようかと思うのですが
> >> > select句が違うだけでほぼ同じSQL文なので
> >> > ちょっと無駄だなぁと思っています。
> >> >
> >> > select count(*)
> >> > の値だけを取得するよい方法は無いでしょうか?
> >> >
> >> > よろしくお願いいたします。
> >> >
> >> > _______________________________________________
> >> > seasar-dotnet mailing list
> >> > seasar-dotnet @ ml.seasar.org
> >> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> >> >
> >
> > _______________________________________________
> > seasar-dotnet mailing list
> > seasar-dotnet @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
seasar-dotnet メーリングリストの案内