[seasar-s2dao-dev:494] Re: 1.0.47のRCに向けてのドキュメントとか

JUNDU [E-MAIL ADDRESS DELETED]
2007年 9月 13日 (木) 12:57:57 JST


JUNDUです。

 私の理解が間違っているかもしれないので、直接修正せずにこちらに出します。

 ModifiedOnly機能の部分について、この機能はgetModifiedPropertyNamesが正しく
実装されていれば使える機能で、それを便利にするのがBeanEnhancerImplという
認識であっていますでしょうか?

 もしそうであれば、s2dao.htmlを以下のように変えて、さらにdaoDicon.htmlを
その下のように変えるのは、どうでしょうか?

s2dao.html -----
v1.0.40からはメソッド名の末尾にModifiedOnlyが付いているUPDATE処理の場合、 引数に渡されたDTOのフィールドのうち、変更した(setterを呼んで変更した)フィールドのみが更新対象となります。(バッチ処理の場合はこの機能は使えません)

この機能を利用するには、ModifiedOnlyを使うメソッドに渡すDTOがgetModifiedPropertyNamesを実装している必要があります。getModifiedPropertyNamesメソッドを実装する方法は、以下の二通りがあります。

Daoの検索メソッドからDTOを取得する

S2Daoが戻り値のDTOに対してAOPを使ってメソッドを自動的に実装します。この方法を使うには、dao.diconに記述されているorg.seasar.dao.impl.NullBeanEnhancerをorg.seasar.dao.impl.BeanEnhancerImplへ入れ替える必要があります。カスタマイズの仕方は、dao.diconのリファレンスの「UPDATE時、修正したプロパティのみを更新対象とする」を参照してください。

ただし、この方法を使った場合、Daoから取得したDTOのインスタンスはシリアライズできますがデシリアライズできないことがあります。 たとえば、Teeda Extensionにオブジェクトをシリアライズ/デシリアライズするItemsSaveという機能がありますが、エンハンスされたDTOのインスタンスに対してこの機能は利用できません。 DTOをシリアライズ/デシリアライズする場合はBeanEnhancerImplを使用しないことを検討してください。

daoDicon.html -----
UPDATE時、修正したプロパティのみを更新対象とする

S2DaoのModifiedOnly機能を使って変更した(setterを呼び出した)プロパティのみをUPDATE文のSET句に指定されるようにする場合、getModifiedPropertyNamesというメソッドを実装する必要があります。これを検索メソッドからの戻り値に対してAOPを使って自動的に実装するのがBeanEnhancerImplです。

このコンポーネントを利用するには、org.seasar.dao.impl.NullBeanEnhancerをorg.seasar.dao.impl.BeanEnhancerImplに差し替えてください。

ただし、この機能はシリアライズ/デシリアライズとの相性が悪いことがありますので、そういった機能を利用する場合には、使用しないようにしてください。


 以上、ちょっとメールだと読みにくいかもしれませんが、いかがでしょうか?


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