2010-12-06 5 views
3

私は、ColdFusion ORMと永続的なcfcsについて学び始めました。私はまだ自分のサイトに何かを実装しようとする前に完全な理解を得ることに取り組んでいますが、どこにでも答えを見つけることができない1つの質問があります。ORM以外で行われた変更をColdFusion ORMがどのように処理するのですか

私は、ページの終わりに1回のトランザクションでデータベースCRUDをバッチ処理したり、select文をインテリジェントにキャッシュしたりすることで、パフォーマンスが向上することを理解しています。後者に関しては、このキャッシングはどのように機能しますか、具体的には、ColdFusionアプリケーションの外部で行われた変更をどのように処理しますか?

名前 髪

ニック       ブラウン

ジョン     ブロンド

:例えば

は、私は次のようなユーザーテーブルがあるとし

今すぐsupp私はPL/SQL Developerを使って簡単な更新クエリを実行し、Johnの髪の色を黒に更新しました。今...

  • 次回、ページがジョンのヘアカラーを表示しようとしたらどうなりますか?
  • 髪の毛の色がまだキャッシュされているため、ブロンドとして表示されていると仮定して、どのようにそのキャッシュをフラッシュできますか?
  • 髪の毛の色がまだブロンドとしてキャッシュされていると仮定すると、CF ORMを使用してJohnの名前をJonathonに変更するとどうなりますか?それは行を更新するとき、それはブロンドに髪の色を上書きしますか?
  • 同様に、CF ORMを使用してヘアカラーをグリーンに更新しようとするとどうなりますか? CFがチェックし、キャッシュされた値(ブロンド)がもはや現在の値(黒色)ではなく、何らかのフィードバックを与えることに気付くでしょうか?

は同様に重要な(多分もっと重要な)、それらの同じ質問が何であるかのcfqueryはジョンの髪の色の代わりに、外部プログラムを更新するために使用されている場合。つまり、CFQueryをORM管理テーブルで安全に使用できますか?

私はCFのドキュメント、Hibernateのドキュメント、およびさまざまなオンラインブログを見直そうとしましたが、ORMのキャッシュに関する情報、および他のデータベース操作メソッド(CFQuery、PL/SQL Developerなど)とのやりとりに関する情報は欠落しています。どんな助けもありがとう。

ありがとうございました。

答えて

2

基本的な「キャッシング」とは、HibernateセッションのほうがColdFusionリクエストの長さを超えているためです。

ColdFusionリクエストが開始され、Nick hairがRedに変更されます。リクエストが完了しました。

SQLエディタでSELECT * ...を実行し、色は赤です。更新を使用して、それをBlondに変更します。

新しいColdFusionリクエストで、ORMを使用してNicksの色を取得すると、その値は「Blond」になります。

基本的に、Marc氏によれば、セカンダリキャッシュを使用しないと、値は常にデータベースから来るものであり、正常に動作します。

+0

したがって、CFQueryは、セカンダリキャッシングが行われていない限り、引き続き使用できます。また、基本的なキャッシュは、スクリプトの最後に更新をバッチ処理するだけです。これはまさに私が探していた情報です。ありがとう。 – Nicholas

1

キャッシュされたデータを外部から更新する場合は、キャッシュを退避する必要があります。

は、以下を参照してください。

ormEvictCollection()ormEvictEntity()、およびormEvictQueries()

1

ほとんどの場合、というのが私の経験をされている - キャッシュが関与していないとき - 物事がうまく動作します。しかし、移行の一環としてデータの束を一掃して再挿入するスクリプトがあります。これらのインスタンスでは、ORMReload()が機能せず、ColdFusionを再起動する必要があります。このような状況が発生したときには、CFから「更新が失敗しました。予想1、受信済み0」というエラーが表示されます。

関連する問題