http://ml.seasar.org/archives/seasar-s2dao-dev/2006-November/000039.html
更新したいカラムのみをUPDATE文に含める機能としてUnlessNullが
ありますが、
1. SELECTしてEntityを取得
2. Entityの1プロパティを更新
3. UPDATE
という操作をすると、結局全カラムがUPDATE文に含まれてしまいます。
更新したくないプロパティへnullをセットすればUnlessNullが機能するのですが、nullをセットするのがちょっと煩雑だと思いました。
というわけで、UPDATE文に更新プロパティのみを含める機能を提案します。
と言いつつ実は手元では動いています。(コードは汚いですが...)
EntityのsetterへAspectを仕掛けて更新したプロパティを記録することで、機能を実現しています。
例えば次の操作を行うと、
final Emp emp = empDao.findById(7499); emp.setJob("MANAGER"); empDao.updateModifiedOnly(emp);
次のようなUPDATE文が発行されます。
UPDATE EMP SET tstamp = '2006-11-24 09.18.29' ,job = 'MANAGER' WHERE empno = 7499 AND tstamp = '2000-01-01 00.00.00'
どうでしょうか? よろしくお願いします。