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

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


金子です。

再度、バッチ一式を流したら、
ビルドが通るようになりました。

何かの加減で、処理が中途半端になってしまったのかもしれません。
お騒がせしました。


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

(2010/09/10 19:13), 金子 雄一 wrote:
> 金子です。
> 
> 自己レスです。
> 
> 再度、バッチ一式流してみます。
> 単に、何かの加減で、中途半端になってしまっただけなのかもしれませんので。
> 
> 
> 以上、よろしくお願いします。
> 
> (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 メーリングリストの案内