Re: hibernateを利用してはいけない5つのシチュエーション
ひがさんから頂いたコメント.
MagazineにModelが既に関連付けられている場合に、Magazine経由でModelを触ったときに触る(関連をたどる)だけで更新されるって意味なのかなぁと、おいらは、勝手に脳内補完してました。
そんなわけで (どんなわけで?),ひがさん脳内補完のケースがどうなるかを検証.
こういうコードでいいんですよね?
Transaction tx = session.beginTransaction(); Magazine magazine = (Magazine) session.createQuery("from hoge.Magazine").list().get(0); Model model = (Model) magazine.getModels().iterator().next(); model.setFirstName("Eri"); tx.commit();
Magazien
から Model
をたどって,その Model
を更新しています.
実際に発行された SQL.
Hibernate: select magazine0_.id as id, magazine0_.title as title1_ from Magazine magazine0_ Hibernate: select models0_.contract as contract1_, models0_.id as id1_, models0_.id as id0_, models0_.firstName as firstName0_0_, models0_.lastName as lastName0_0_, models0_.contract as contract0_0_ from Model models0_ where models0_.contract=? Hibernate: update Model set firstName=? where id=?
Magazine
は更新されていませんね.
そんなわけで (どんなわけで?),やはり元記事の著者がどんな状況で
hibernateでTransactionを使用すると、同一Transaction内でセレクトした全てのオブジェクトをTransactionコミット時に勝手に更新します。
と言っているのか,わけが分からないままです〜.
一応,元記事の方に バックトラック トラックバック送ってるのですが (今日のこれも送ります),元記事の著者さん気づいてるかなぁ?
気づいていたら,詳しい説明サンプル付きでプリーズ!!
P.S.
なんか,遅延ロードの SQL が Hibernate 2.x と変わってますね...
なんで SELECT 句に contract
を 2 回,id
に至っては 3 回も並べているのだろう?
不思議です...
04:00 追記
なんか,トラックバックが失敗する...
昨日はちゃんと送れたんですけどねぇ.
あちらのページを見ると,昨日トラックバックした際には文字化けしていたのが今は直っているので,その辺の影響でしょうか?
それならそれで著者の方も気づいてくれてるだろうから別にいいのですが.