2012年04月04日

更新時のBeans.createAndCopyは意外と危険かも。

SAStrutsでの開発で、更新処理を作ってたのだけど、

ヘボいミスで、

Hoge entity = Beans.createAndCopy(Hoge.class, hogeForm).execute();

hogeService.update(entity);

というロジックでやってた。

今のシステムは開発がどんどん進んでいるので、

いつの間にか、formとentityのプロパティが完全に一致しなくなってた。

そんな状態で上記のロジックが動作すると、formに無いプロパティはnullなentityが生成されてしまう。

DBでnot null属性ならばエラーで気づくことができるけど、そうでない時は意図しない値がnullで更新されてしまう。

updateByIncludesや、updateByExcludesで更新プロパティの指定をやってたのだけど、

DBの項目が増えて行くたびに、その辺りのつじつまもいつの間にかズレていた。

ということで、更新時のBeans.createAndCopyを廃止して、以下の様に書きなおした。

Hoge entity = hogeService.findById(hogeForm.id);

Beans.copy(hogeForm, entity).execute();

hogeService.update(entity);

一度、DBよりentityを取得して、formにあるプロパティだけ上書きするという感じ。

これでformとentityのプロパティが一致してなくとも、意図しない値がnullになることはない。

※formのプロパティがnullになってた場合などは仕方なし。。。

まあ、これで様子見てみる。
posted by hana at 20:43| Comment(0) | TrackBack(0) | seasar関連 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。