[Seasar-user:8180] Re: [teeda]変更があったレコードのみをUPDATEするには

木村 究道 [E-MAIL ADDRESS DELETED]
2007年 6月 8日 (金) 11:59:10 JST


木村です。

> 大谷です。
> 同時更新であれば、チェックボックスを各行につけて
> チェックの入っている行だけを更新するようにしてはいかがでしょうか。
試してみました。希望通りに動きました。
Dtoに変更されたかどうかを示すFlg(updateFlg)を追加して、以下のよう
にしてみたところ、変更した行だけがUpdateされました。
が、よく考えたら究極には変更された項目だけUpdateする方がいいですね。
もうちょっと考えます。

画面(一覧表示)
-----------------------------------------------------
<table>
 <tr>
   <th>コード</th>
   <th>名前</th>
   <th>カナ</th>
 </tr>
<div id="userItems">
 <tr>
   <td><span id="Code">Code</td>
   <td><input id="Name" onkeydown="updateFlgCheck(this);"/></td>
   <td><input id="Kana" onkeydown="updateFlgCheck(this);"/></td>
   <input type="hidden" id="updateFlg" />
 </tr>
</div>
</table>

JavaScript
-----------------------------------------------------
function updateFlgCheck(el){
    elForm = el.form;
    elName = el.name;
    el = elName.split(":");
    el[el.length-1] = "updateFlg";
    elName = el.join(":");
    elForm.elements[elName].value = true;
}

UPDATEのロジック(各行をUPDATE)
-----------------------------------------------------
public String doUpdate() {
    for(int i=0 ; i < this.userItems.length ;i++){
        if(this.userItems[i].getUpdateFlg()){
            this.userDao.update(this.userItems[i]);
        }
    }
    return null ;
}



> 緑川です。
> やったことは無いんですが、S2Daoの下記の機能を使ったら出来る
> 気がします。
早速試してみました。

userDtoに

private java.util.Set _modifiedPropertySet = new java.util.HashSet();
public java.util.Set getModifiedPropertyNames() {
    return _modifiedPropertySet;
}

を追加して、
userDaoに

public int updateModifiedOnly(userDto userdto);

を追加しました。これで動かすと、ログに

skip UPDATE: table=USER, key{Code=0001}
    ・
    ・
    ・

と出てUpdateされませんでした。

もう少し調べてみます。

                      以 上
-- 
-----------------------------------------------------
 十八ソフトウェア株式会社
 システム開発部 ネットワーク・製品開発課 木村 究道
 〒850-0861 長崎市江戸町6-5江戸町センタービル6F
 TEL:095-824-0018  FAX:095-827-8754
 E-mail: [E-MAIL ADDRESS DELETED]
-----------------------------------------------------



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