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