[Seasar-user:6521] Re: [DBFlute]CommonColumn について

kubo [E-MAIL ADDRESS DELETED]
2007年 3月 6日 (火) 17:34:24 JST


久保です。

> CommonColumnにて以下のようにinsert時に3項目、update時に1項目を設定しています。
> insert時に正しく3項目が更新されていることを確認しました。
> 
> でも、updateを実行すると、実際には3項目の更新が行われてしまいます。(RTIME=null、UUSER=設定値、RUSER=null)
> 
> 設定したUUSERのみを更新したいのですが。
> 設定の不備や、お気づきの点がありましたら、ご教授お願い致します。


まず、Interceptorの動きに関しては、実行時に以下のようなログが
出力されます。これにて、Interceptorが想定どおりの動きかどうか
を確認することができます。

Intercepted the method 'LdDaoWritable.modifyModifiedOnly()': entity=map:@{BOOK_ID@=1@}
  before setup : map:@{R_TIME@=...}
    U_USER has been set up: value=HardCodeUser
  after setup  : map:@{R_USER@=...}


設定を拝見させて頂いた限りは、特に設定に不備があるようには思えないので、
Update時は、上記のように UUSER のみが更新setupされたというログに
なるはずです



こちらから、2点確認させて下さい。

A. Daoのメソッドは、updateModifiedOnly() を利用されていますでしょうか?

  xxxModifiedOnly()以外の更新メソッドは、update文に全ての列を含めて
  しまいますので、指定したEntityのRTIMEやRUSERがnullの場合は、
  ご指摘のような現象が発生してしまうかと思います。

  ※Behaviorのupdate()経由ならupdateModifiedOnly()が
    利用されているはずです


B. 「DXOにてPAGEクラスからEntityクラスへ値を設定」とのことですが、
   この時、Entity の RTIME や RUSER の Setter は呼び出されますでしょうか?
   (そして、その時設定される値はnullでしょうか?)

  updateModifiedOnly()は、Setterが呼び出された列のみ更新します。
  Null値を設定された場合は、Null値で更新します。







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