[seasar-s2dao-dev:97] Re: VersionNo やTimestampの値がnullだった場合の仕様について

Yasuo Higa higa @ isid.co.jp
2007年 1月 4日 (木) 15:16:05 JST


ひがです。

> 久保です。
> 
> Entityに、VersionNoやTimestampのAnnotationを付与して
> S2Daoに排他制御を自動で行ってもらう場合の話です。
> 
> 
> VersionNo/TimestampのAnnotationを付与すると、
> Dao#update()の引数のEntityのVersionNo/Timestampに値が
> SetされているとUpdate文のWhere句に条件が付与されます。
> ex) VERSION_NO = 3
> 
> 現状、その引数のEntityのVersionNoがnullだった場合、
> Update文のWhere句の条件は、VERSION_NO = null となり、
> 必ず0件更新になって、NotSingleRow...Exceptionが発生します。
> 
> (S2DaoのManualより)
> > 更新時にTimestamp用のカラムの値にnullが設定されていると
> > 比較に失敗するので注意してください。
> 
> とあるので、これはS2Daoの仕様となると思いますが、
> この仕様の目的は:
> 
>   Entityに排他制御のAnnotationを付けたからには、
>   VersionNo/Timestampの値を設定しない限り更新をできないようにする。
>     →排他制御の強制
> 
排他制御の強制と言うつもりはないです。
SQLファイルで排他制御をする場合もあると思っているので。
現状だと、SYSDATEなどDBMSのファンクションをupdate句に
含めたいような場合です。

Yasuo Higa
The Seasar Project


seasar-s2dao-dev メーリングリストの案内