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

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


金子です。

うーん、ビルドエラーに・・・・。
どうも、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 メーリングリストの案内