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関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック