技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

J2EEのEntity Manager経由でDBから取得したオブジェクト

J2EEのEntity Manager経由でDBから取得したオブジェクトを、そのオブジェクトがEntity Managerの管理下にある状態の時に変更すると、それがDBに反映されるので注意が必要である。
例えば、

User user = entityManager.find(User.class, id);

として取得した user オブジェクトに対して、

user.setName("Taro");

とすると、この変更はトランザクション終了時などに自動的にDBに反映される。DBに反映されるタイミングについては、以下のページが分かりやすかった。
http://enterprisegeeks.hatenablog.com/entry/2015/01/19/142730
http://itref.fc2web.com/java/jpa/


上述のことを意識しておかないと、メモリ上のオブジェクトの情報を変更しただけのつもりで、実際にはその変更はDBにも反映されて「あれ?DBのデータは変更した覚えがないけど・・・」とかなってしまう。