2010-12-14 14 views
2

Userがエンティティで、をSessionに保存する必要がある場合は、次回のリクエストでデタッチされます。更新DBセッションのオブジェクトと(危険な) CF9で切り離されたオブジェクトを扱うには?

  • session.userID - - 次の要求(もっと負荷)に再びentityLoadByPK()
  • これらの分離オブジェクトを処理するための唯一の2つの方法

    1. EntityMerge(session.user)がそこにいる私の知る限り

      これらは唯一の2つの回避策ですか?他の方法?

      によるAdvanced Techniques with ColdFusion 9 ORM Integration Slide Deckマージ時にエンティティが変更された場合、メソッド#1の並行処理でエラーが発生しますが、どのように役立ちますか?例外をキャッチし、メソッド#2を使用しますか?

      EntityReload()を使用する場合は?私はそれがと同じ方法で動作すると思ったが、それはしない。

      ありがとうございます!

    +0

    こちらもお問い合わせください:http://groups.google.com/group/cf-orm-dev/browse_thread/thread/5792d3a387af18ae – Henry

    答えて

    3

    私は、セッションにログインしているユーザーのIDのみを格納する傾向があります。

    次に、必要に応じてそのユーザーを返すUserService.getCurrentUser()ファサードメソッドがあります。

    このように、ユーザーは常に最新であり、決して切り離されません。

    2

    私は通常、セッションで最上位レベルのプロパティのみを含む軽量プロキシオブジェクトを使用し、説明したのとまったく同じユースケースで、必要に応じて完全なエンティティをロードします。本当にあなた自身を燃やしたくない場合(そこで話す経験)、方法#1を使用しないでください。

    +0

    どのように軽量ですか?行動のないフィールドだけ?メソッド#2のようなプロパティのstructとはどう違うのですか?ありがとう! – Henry

    +0

    +1これは@Mark Mandelの答えと@ Henryのオプション#2と同じコンセプトですが、ちょうどIDだけではありません)です。 User ORMエンティティからの情報の小さなサブセット(例:id、username、fullname)を持つUserBeanを定義しました(Coldbox beanFactory.populateは1回の呼び出しを行います)。どのような複雑なルックアップ(子関係も)はsession.userbean.getID()を参照します。 – mujimu

    0

    Hibernateセッションは遅延ロードされており、持続しません。だからCFオブジェクトをメモリに入れている間、彼らはより良い用語がないため、範囲外のHibernateセッションを指しています。範囲を取り戻すには、EntitySave()またはEntityLoadByExample()などのようなものを使用して、後続のリクエストで目を覚ます必要があります。

    サービスでラッピングすると、エンティティに直接触れるよりも構造的に全体的に優れています。

    関連する問題