[Seasar-user:20145] Re: 【DBFlute】 (Query)DerivedReferrerについて

金子 雄一 [E-MAIL ADDRESS DELETED]
2010年 9月 10日 (金) 19:13:58 JST


金子です。

自己レスです。

再度、バッチ一式流してみます。
単に、何かの加減で、中途半端になってしまっただけなのかもしれませんので。


以上、よろしくお願いします。

(2010/09/10 19:11), 金子 雄一 wrote:
> 金子です。
> 
> うーん、ビルドエラーに・・・・。
> どうも、Javadocコメントがおかしな感じで出てきます。
> 
> deleteNonstrictIgnoreDeleted
> のメソッドと、
> 
> batchUpdateNonstrict
> のメソッドのあいだが変でした。
> 
> 
> /**
> * Delete the entity non-strictly ignoring deleted. 
> {UpdateCountZeroException, NonExclusiveControl}
> * <pre>
> * ChkoutHdrFil chkoutHdrFil = new ChkoutHdrFil();
> * chkoutHdrFil.setPK...(value); <span style="color: #3F7E5E">// 
> required</span>
> * <span style="color: #3F7E5E">// you don't need to set the value of 
> exclusive control column</span>
> * <span style="color: #3F7E5E">// (auto-increment for version number is 
> valid though non-exclusive control)</span>
> * <span style="color: #3F7E5E">//chkoutHdrFil.setVersionNo(value);</span>
> * chkoutHdrFilBhv.<span style="color: 
> #FD4747">deleteNonstrictIgnoreDeleted</span>(chkoutHdrFil);
> * <span style="color: #3F7E5E">// if the target entity doesn't exist, no 
> exception</span>
> * </pre>
> * @param chkoutHdrFil Entity. (NotNull) {PrimaryKeyRequired}
> * @exception org.seasar.dbflute.exception.EntityDuplicatedException When 
> the entity has been duplicated.
> */
> public void deleteNonstrictIgnoreDeleted(ChkoutHdrFil chkoutHdrFil) {
> date the list non-strictly. <br />
> * All columns are update target. {NOT modified only} <br />
> * This method uses 'Batch Update' of java.sql.PreparedStatement.
> * @param chkoutHdrFilList The list of the entity. (NotNull)
> * @return The array of updated count.
> * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException 
> When the entity has already been deleted.
> */
> public int[] batchUpdateNonstrict(List<ChkoutHdrFil> chkoutHdrFilList) {
> assertObjectNotNull("chkoutHdrFilList", chkoutHdrFilList);
> return delegateUpdateListNonstrict(chkoutHdrFilList);
> }
> 
> 
> こんな感じで出てきます。
> 
> 
> 以上、よろしくお願いします。
> 
> 
> 
> (2010/09/10 17:34), kubo wrote:
>> 久保(jflute)です。
>>
>>> ありがとうございます。
>>> 軽く調べてみましたが大丈夫そうですね。少なくとも、
>>> DerivedReferrer系では対応しようかと思います。
>>> (日付型とか他の型はどうするかちょっと考えます)
>>
>> o バインド変数にするかどうか(そもそも可能か)
>> o ユーザインターフェースをどっちにするか
>> o 引数の型をObjectにするか、別の型にするか
>>
>> これらを保留していますが、とりあえずできました。
>> プログラム上での指定を、Object型にして、
>> 数値型は、そのまま数値リテラル、
>> その他の型は、toString()値の文字列リテラル、
>> という仕様になっています。I/Fは前者。
>>
>> DBFlute-0.9.7.4-03-SNAPSHOT をご利用下さい。
>> ちょっとテストがかなり大変なので、色々動かして
>> もらえると助かります。
>>
>>> 確かに、そうですね。
>>> ただ、個人的には、後者のほうが、実装後に何をやっているかは、
>>> 見てすぐわかるかなと思います。(1か月前の自分は自分じゃないんで…。)
>>
>> 引数の型を工夫して、両方が満たせる仕様を模索しています。
>> (多少、面倒な仕様でも、めったに使う機能じゃないから、
>> 逆にシンプルよりも「やりやすい・あとでわかる」を優先した
>> 方がいいですね)
>>
>> 2010/9/10 金子 雄一<[E-MAIL ADDRESS DELETED]>:
>>> 金子です。
>>>
>>>> まあ、この機能存在に気付いてもらいやすいのは前者ですかね。
>>> 確かに、そうですね。
>>> ただ、個人的には、後者のほうが、実装後に何をやっているかは、
>>> 見てすぐわかるかなと思います。(1か月前の自分は自分じゃないんで…。)
>>> (でも、自分が作ったら、前者のI/F作っちゃうんだろうな、きっと。)
>>>
>>> Eclipseの補完と、このメソッドがコールバックが多いことまで考慮すると、
>>> 前者のほうが、若干、よいのかもしれませんね。
>>> なので、作りやすいほうでよいかと思います。
>>>
>>>
>>> 以上、よろしくお願いします。
>>>
>>> (2010/09/10 16:19), kubo wrote:
>>>>
>>>> 久保(jflute)です。
>>>>
>>>>>> coalesce って DBMS 共通かなぁ...!?
>>>>>
>>>>> SQL92の予約語(のはず)なので、DBMS共通と考えて、差支えないかと。
>>>>
>>>> ありがとうございます。
>>>> 軽く調べてみましたが大丈夫そうですね。少なくとも、
>>>> DerivedReferrer系では対応しようかと思います。
>>>> (日付型とか他の型はどうするかちょっと考えます)
>>>>
>>>> ユーザインターフェースは二通りのどちらかを考えています。
>>>> まあ、この機能存在に気付いてもらいやすいのは前者ですかね。
>>>> 現状、max() とか min() とかシンプル過ぎてEclipseで補完する
>>>> ときに一瞬ちょっと見づらいので(Objectクラスのメソッドに紛れる)、
>>>> オーバーロードでダブってた方が、選びやすいというのもあるかも。
>>>>
>>>> //
>>>> // (Specify)DerivedReferrer
>>>> //
>>>> cb.specify().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>>> ...
>>>> }, null, 0); // オーバーロード
>>>>
>>>> cb.specify().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>>> ...
>>>> }, null).coalesce(0); // 後付けメソッド
>>>>
>>>> //
>>>> // (Query)DerivedReferrer
>>>> //
>>>> cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>>> ...
>>>> }).greaterEqual(expected, 0); // オーバーロード
>>>>
>>>> cb.query().derivedPurchaseList().max(new SubQuery<PurchaseCB>() {
>>>> ...
>>>> }).greaterEqual(expected).coalesce(0); // 後付けメソッド
>>>>
>>>>
>>>> 2010/9/10 金子 雄一<[E-MAIL ADDRESS DELETED]>:
>>>>>
>>>>> 金子です。
>>>>>
>>>>>> 例えば、基点テーブルが FOO で BAR が子テーブルのとき、
>>>>>> BAR を持っていない FOO が検索結果から外れてしまうので、
>>>>>> max() の結果に対して、null の場合に 0 にする関数をラップしたい、
>>>>>> ということでよろしいでしょうか?
>>>>>
>>>>> まさに、その通りです。
>>>>>
>>>>>
>>>>>> coalesce って DBMS 共通かなぁ...!?
>>>>>
>>>>> SQL92の予約語(のはず)なので、DBMS共通と考えて、差支えないかと。
>>>>>
>>>>>
>>>>> 以上、よろしくお願いします。
>>>>>
>>>>>
>>>>> (2010/09/10 15:46), kubo wrote:
>>>>>>
>>>>>> 久保(jflute)です。
>>>>>>
>>>>>> ご確認ありがとうございます。
>>>>>>
>>>>>> 例えば、基点テーブルが FOO で BAR が子テーブルのとき、
>>>>>> BAR を持っていない FOO が検索結果から外れてしまうので、
>>>>>> max() の結果に対して、null の場合に 0 にする関数をラップしたい、
>>>>>> ということでよろしいでしょうか?
>>>>>>
>>>>>> where FOO.FOO_COUNT>= (
>>>>>> select max(BAR.BAR_COUNT)
>>>>>> from BAR
>>>>>> where BAR.FOO_ID = FOO.FOO_ID
>>>>>> )
>>>>>>
>>>>>> ※売上データがFOO???参考までに当てはめて頂ければと
>>>>>>
>>>>>> 通常の (Specify)DerivedReferrer や ScalarSelect などでは、
>>>>>> それ自体が取得値なので、無い場合に null でもプログラム側で
>>>>>> なんとかすればいいのでそんなに問題にはなりませんが、
>>>>>> こうやってSQLの中で利用するときややこしい話になりますね。
>>>>>> そういう意味で、(Query)DerivedReferrer や ScalarCondition には
>>>>>> 共通するような話かもしれません。
>>>>>> もともとSQLの有名なハマりどころなので、
>>>>>> そういう意味でもしっかり対応したいとは思いますが、
>>>>>> coalesce って DBMS 共通かなぁ...!?
>>>>>> もう少々、色々と考えます。
>>>>>>
>>>>>> null のときに検索対象から外したい場合は、
>>>>>> null 演算で外れるよりも、別途(Query)DerivedReferrer などで
>>>>>> 明示的に絞り込んだ方が良いと思うので、null の場合は固定で
>>>>>> 0 でもいいかなとは思いますが、今の時点でそれはなかなか
>>>>>> できないので、オプションにする形を想像しています。
>>>>>>
>>>>>> #
>>>>>> # 例外処理を埋め込んだ DBFlute-0.9.7.4-02-SNAPSHOT を
>>>>>> # 公開しました。
>>>>>> #
>>>>>>
>>>>>> 2010/9/10 金子 雄一<[E-MAIL ADDRESS DELETED]>:
>>>>>>>
>>>>>>> 金子です。
>>>>>>>
>>>>>>> 一通り動かしてみましたが、
>>>>>>> 今のところ、予期した通りの動きです。
>>>>>>>
>>>>>>> が、肝心なことを忘れてました…。
>>>>>>> 子テーブルなので、必ずしも、レコードがあるわけでないのでした…。
>>>>>>>
>>>>>>> 業務的には、返品業務の実装をしています。
>>>>>>>
>>>>>>> で、現状、どの部分で、この機能を欲したかというと、
>>>>>>> 返品をする対象(つまり、売上データ)を検索検索する部分です。
>>>>>>>
>>>>>>> 基本的には、売上データを検索すればよいのですが、
>>>>>>> 全額返品している場合には、検索対象から外すという処理です。
>>>>>>>
>>>>>>> 返品そのものがない場合(たぶん、ほとんどが該当)は、
>>>>>>> 返品テーブルにデータがないので・・・・。
>>>>>>> という感じです。
>>>>>>>
>>>>>>> なので、CBの範疇かが、怪しいのですが、
>>>>>>> deriverの機能で、sum(),max(),min() 等ができるようになっていますが、
>>>>>>> ここに、coalesce関数をつける・つけないを選択できようには、ならな 
>>>>>>> いでしょ うか?
>>>>>>> ( coalesce(sum(ColB),0)とすれば、子テーブルのレコードがない場合 
>>>>>>> は、0にな
>>>>>>> るので。ただし、そん座していない場合は、検索結果として取得できて 
>>>>>>> はいけな
>>>>>>> い場合もあるかと思いますので、選択できればよいのかなと。coalesce 
>>>>>>> の第2引
>>>>>>> 数をどう渡す?という問題もあるかと思いますので、実は、厳しいのか 
>>>>>>> もしれま せんが・・・・。)
>>>>>>>
>>>>>>> CBの範疇や、DBFluteとしてのポリシーもあるかと思いますので、
>>>>>>> それを破らない範囲であれば、対応を検討していただけると、
>>>>>>> ありがたく思います。
>>>>>>>
>>>>>>>
>>>>>>> ご不明な点がありましたら、ご連絡ください。
>>>>>>> 以上、よろしくお願いいたします。
>>>>>>>
>>>>>>> (2010/09/10 6:21), kubo wrote:
>>>>>>>>
>>>>>>>> 久保(jflute)です。
>>>>>>>>
>>>>>>>> DBFlute-0.9.7.4-01-SNAPSHOTを使ってみて下さい。
>>>>>>>> (モジュール、ランタイム両方)
>>>>>>>>
>>>>>>>> まだ、各種例外処理が入っていないですが、
>>>>>>>> ColumnQueryの中で(Specify)DerivedReferrerが利用できます。
>>>>>>>> aliasName には固定で null を入れて下さい。
>>>>>>>>
>>>>>>>>> where
>>>>>>>>> 数字 = max(文字型カラム)
>>>>>>>>
>>>>>>>> これは、もともとの ColumnQuery でも、
>>>>>>>> コンパイルレベルでの抑制はできないので同じことかと。
>>>>>>>> 高度な機能に関しては、この辺は割り切りを入れています。
>>>>>>>> _______________________________________________
>>>>>>>> Seasar-user mailing list
>>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>
>>>>>>>
>>>>>>> -- 
>>>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>>>> 金子 雄一 Yuichi Kaneko
>>>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>>>> _______________________________________________
>>>>>>> Seasar-user mailing list
>>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>>>
>>>>>> _______________________________________________
>>>>>> Seasar-user mailing list
>>>>>> [E-MAIL ADDRESS DELETED]
>>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>>>
>>>>> -- 
>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>> 株式会社プラスサム
>>>>> 金子 雄一 Yuichi Kaneko
>>>>> 〒330-0854
>>>>> 埼玉県さいたま市大宮区桜木町2-7-4
>>>>> プラスサムビル
>>>>> Tel: 048-650-9777 Fax: 048-650-9778
>>>>> E-mail : [E-MAIL ADDRESS DELETED]
>>>>> http://www.plus-sum.co.jp/
>>>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>>>> _______________________________________________
>>>>> Seasar-user mailing list
>>>>> [E-MAIL ADDRESS DELETED]
>>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>>>
>>>> _______________________________________________
>>>> Seasar-user mailing list
>>>> [E-MAIL ADDRESS DELETED]
>>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>>>
>>> -- 
>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>> 金子 雄一 Yuichi Kaneko
>>> ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
>>> _______________________________________________
>>> Seasar-user mailing list
>>> [E-MAIL ADDRESS DELETED]
>>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
> 
> 


-- 
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
金子 雄一  Yuichi Kaneko
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆


Seasar-user メーリングリストの案内