[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 メーリングリストの案内