[Seasar-user:4936] [S2Dao]update文の更新項目の動的な制御について
Minoru Taki
[E-MAIL ADDRESS DELETED]
2006年 10月 26日 (木) 10:41:52 JST
瀧と申します。
S2Daoのupdate文についてご意見を頂きたくメールしました。
S2Daoはupdate文もSQLを自動生成する機能がありますが、
実際には更新したくない項目が更新パターン毎あります。
通常であれば、PERSISTENT_PROPSやNO_PERSISTENT_PROPSを駆使して
使い分けることになるとは思いますが、パターンが多い場合、
更新メソッドのインタフェースの数が増える一方です。
そこで自動生成を使用せず、updateメソッドを一つにして、
下記のようにIFコメントで更新を動的に制御して逃げているのですが、
なんとなくスマートではないと思っています。
・モデルの中身がある値(下記の例はnull)であるということの条件で縛られる
・SQL文が単純に見にくい(感覚的な問題かも・・・)
・SET句には複数の項目があるためカンマ(",")が必要
→最初と最後につける・つけないを判断しなければならない
現在は排他制御のためにテーブル定義に一様にTimestampがあるため
(必ず更新する項目があるため)助かっています。
update.sqlの例
-------------------------------------
UPDATE USER_INFO
SET
/*IF model.ADDRESS != null*/
ADDRESS=/*model.ADDRESS*/,
/*END*/
/*IF model.TEL != null*/
TEL=/*model.TEL*/,
/*END*/
/*IF model.EMAIL != null*/
EMAIL=/*model.EMAIL*/,
/*END*/
UPD_DT = SYSTIMESTAMP ←この行があるから助かっている
WHERE
USER_ID = /*model.USER_ID*/
AND TIMESTAMP = /*model.TIMESTAMP*/;
-------------------------------------
このあたりはどのように使用されているでしょうか?
PERSISTENT_PROPS,NO_PERSISTENT_PROPSが動的に与えられたらよいのかもしれませんが、
如何せん、finalですしstaticでもあるため、変更できる仕様は
S2Daoの使い方に合わないのかもしれません。
何か良い意見があれば、頂戴したく存じます。
Seasar-user メーリングリストの案内