2

そのオブジェクトに固有のプロパティを持つクラスがいくつかあります。たとえば、Userクラスの場合、プロパティUsernameを複製しないでください。

NHibernateは、Load()またはGet()と同じ方法でキャッシュされる一意のキーによるオブジェクトのロードをサポートしていないようです。私がそれを言うとき、私は正しいですか?

私がそうであれば、LoadByUniqueIndex(ラムダプロパティ、オブジェクトキー)の行に沿って、おそらく拡張メソッドを介して自分自身をロールする必要があります。

4

1 に答える 1

1

はい、その通りです。NHは、ID以外のエンティティをキャッシュから直接取得しません。IDを除くすべてが変更される可能性があり、データベースで検索する必要があることに注意してください。

キャッシュするときは注意してください。「時期尚早のキャッシングはすべての悪の根源です」など。真剣に、顕著なパフォーマンスの問題が発生するかどうかわからない場合は、独自のキャッシュを作成しないでください。

  • 同じエンティティが複数回ロードされないように、エンティティを引数として渡すコードを記述します。
  • セッションより長く存続するキャッシュは避けてください。すべての変更を通知しないと、データが古くなります。
  • 静的なキャッシュは避け、代わりに静的スレッドを使用してください。これにより、セッション間でデータを共有することを回避できます。これにより、トランザクションの分離が破られます。
  • 本当に必要な場合は、第2レベルのキャッシュを使用してください。

アプリケーションが実行されている限り存続する静的キャッシュがあることを検討している場合は、それをまったく避けた方がよいと言えます。妥当な労力で適切に機能しません。

于 2009-05-27T09:25:07.510 に答える