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.
なんか,遅延ロードの SQLHibernate 2.x と変わってますね...
なんで SELECT 句に contract を 2 回,id に至っては 3 回も並べているのだろう?
不思議です...


04:00 追記
なんか,トラックバックが失敗する...
昨日はちゃんと送れたんですけどねぇ.
あちらのページを見ると,昨日トラックバックした際には文字化けしていたのが今は直っているので,その辺の影響でしょうか?
それならそれで著者の方も気づいてくれてるだろうから別にいいのですが.