[Seasar-user:10433] Re: [S2Dao]VersionNoによる排他制御が2回目の更新以降、正しく行われない。

nobu [E-MAIL ADDRESS DELETED]
2007年 9月 10日 (月) 13:00:18 JST


近藤(nobu)です。

JUNDOさん、本間さんご回答ありがとうございます。

JUNDU さんは書きました:
>  排他制御を正しく使うのであれば、渡したEntityを2回目以降で使うか、以下のよう
> にEntityのVersionNoをDtoに書き戻す処理が必要だと思います。
> 
> public class HogeLogicImpl implements HogeLogic {
> 	public void update(HogeDto dto) {
> 		HogeTable entity = convertDtoToTableEntity(dto); 
> 		dao.update(entity);
> 		dto.setVersionNo(entity.getVersionNo());
> 	}

まさに、「渡したEntityを2回目以降で使うか」の所でした。
テーブル読み込みでEntityの値をDTOにいれ、更新で、DTOからEntityに値をいれ
ていたのですが、更新時にDTOをnewしており、その影響でDTOに残っていると
思っていたversionNoがクリアされてしまっていました。
※newをするのは、新規(insert)時のみという判断が抜けていました。


Hirotaka HONMA さんは書きました:
>> テーブルのversionnoの値は、insert,update(1回目),update(2回目)で、次のよ
>> うに変化していくと思っています。
>
> はい、この認識であっています。
>
> zip配布のS2Daoに付属しているサンプルで確認できると思います。

あ、サンプルがあったんですね・・・。そうとは知らず、リファレンスと格闘
していました。これから中身を見てみたいと思います。




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