問題タブ [second-level-cache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - Hibernate L2 Cache のトランザクション戦略
Hibernate L2 キャッシュ ベンダーが「トランザクション」戦略をサポートしている場合、このキャッシュは、Hibernate 構成で指定されているトランザクション間の同じレベルの分離を保証することを意味しますか?
たとえば、キャッシュが「読み書き」戦略をサポートしている場合、REPEATABLE_READ 分離レベル (場合によっては READ_COMMITTED レベルのみ) が保証されます。
hibernate - Hibernate の第 2 レベルのキャッシュがコミットされたエンティティをキャッシュしない
他のアプリケーションが DB を変更していないことがわかっている場合、Hibernate の第 2 レベル キャッシュ (EHCache を使用しています) で、アプリケーションが DB にコミットされたエンティティをキャッシュできるようにすることができるかどうか疑問に思っています。
私の考えでは、レコード A を更新すると、レコード A の値がわかり、それをキャッシュできるはずです。Terracotta のような JVM クラスタリング システムは、Java 同期ロックを使用する JVM ヒープ メモリに関して、このタイプの動作をサポートします。
hibernate - JBoss5のHibernateの第2レベルのキャッシュとしてのJBossCache
これが私の設定です:Hibernate 3.3.1.GA、JBoss 5.1.0.GA、JBossCache3.2.0.GA。
ここで説明されているようにHibernate構成を行っています: http ://www.jboss.org/community/wiki/ClusteredJPAHibernateSecondLevelCachinginJBossAS5
しかし、指定されたプロパティが無効であるというエラーが発生します。
したがって、「cache.region.factory_class」プロパティは使用できず、「cacheRegionFactoryClass」(例外で表示されます)のみを使用できます。
cache.region。*のような他のプロパティを使用できないため、休止状態の2番目のレベルのキャッシュを構成できません。
誰かがJBoss5.1でJBossCache3.2を設定する方法のリンクを教えてもらえますか?特にJndiSharedJBossCacheRegionFactoryとJndiMultiplexedJBossCacheRegionFactoryに興味があります。
java - Hibernate: カスケード削除アイテム中にコレクションの第 2 レベルのキャッシュを消去する
カスケード削除の対象となるアイテムのコレクションに対して、Hibernate が第 2 レベルのキャッシュを更新しないという問題があります。
詳細
Child オブジェクトの Parent.myChildren コレクションを持つオブジェクト Parent があるとします。これで、Humans.myAllHumans コレクションを持つオブジェクト Humans もあり、すべての親オブジェクトと子オブジェクトはそのコレクション内にあります。
これで、session.delete(parent)が実行され、すべての子がデータベースからカスケード削除されますが、Humans.myAllHumans コレクションのキャッシュは更新されません! カスケード削除されたオブジェクトがデータベースにあると想定し、後でコレクションを反復しようとすると、次の例外が発生します:
org.hibernate.ObjectNotFoundException: 指定された識別子を持つ行が存在しません: [foo.Child#751]
試みたアプローチ
1)私はSessionFactory.evictCollection()アプローチを試しましたが、トランザクションセーフではなく、第 2 レベルのキャッシュからデータをハード削除することを理解しているので、それは望ましくありません。
2) myAllHumans コレクションから各オブジェクトを手動で (プログラムで) 削除することもできます。この場合、休止状態は第 2 レベルのキャッシュを更新します。このアプローチは、カスケード削除機能が役に立たなくなるだけなので、避けたいと思います。
期待される
コレクションのキャッシュを自動的に更新できるように、休止状態を賢くしたいと思います。出来ますか?
私は現在 EhCache を使用しています。別のキャッシュ実装を使用するか、EhCache を構成すると役立つと思いますか?
wcf - Hibernate クエリ キャッシュと WCF
クエリの 1 つでクエリ キャッシュを有効にしました。テストまたはコンソール アプリケーションを実行すると、正常に動作します (クエリ結果はクエリ キャッシュから取得され、エンティティは第 2 レベル キャッシュから取得されます)。ただし、WCF サービスを介して同じクエリを実行すると、キャッシュがヒットすることはありません。
どちらの場合もログを確認しましたが、キャッシュ ミスが発生するまでは実質的に同じです。
キャッシュが置かれたことを示すNHのログは次のとおりです。
キャッシュミスを示すNHのログは次のとおりです。
WCF サービスにない場合のキャッシュ ヒットを示す NH のログは次のとおりです。
クエリを実行するために使用しているコードは次のとおりです。
キャッシュがヒットしないのはなぜですか?
database - 別のプロセスがデータベースを変更するときの Hibernate 2 次キャッシュの無効化
Hibernate の第 2 レベルのキャッシュを使用してデータベース ヒットを回避するアプリケーションがあります。
MySQL 管理者などの外部プロセスが直接接続してデータベースを変更 (更新/挿入/削除) したときに、Java アプリケーションの Hibernate 2nd レベル キャッシュを無効にする簡単な方法があるかどうか疑問に思っていました。
2 番目のレベルのキャッシュの実装としてEHCacheを使用しています。
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) と @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) を組み合わせて使用し、各エンティティのタイムスタンプを使用してオプティミスティック同時実行制御を有効にしません。
SessionFactory には、第 2 レベルのキャッシュを管理するためのメソッドが含まれています。 - キャッシュの管理
しかし、個々のエンティティ クラスに @Cache でアノテーションを付けているため、それを「確実に」(たとえば、手動の手順なしで) リストに追加する中心的な場所がありません。
Hibernate の第 2 レベルのキャッシュがエンティティを照会しない限り、DB でエンティティが変更されたことを知る本当の方法はありません (これはキャッシュがあなたを保護しているものです)。したがって、解決策として、単純にメソッドを呼び出して、第 2 レベルのキャッシュにすべてを強制的に追い出すことができます (これも、ロックと同時実行制御が不足しているため、進行中のトランザクションが古いデータを「読み取ったり更新したりするリスクがあるためです)」。
nhibernate - NHibernate名前付きクエリと第2レベルのキャッシュ
私は次のマッピングを持っています
およびhibernate.cfg.xmlの次の構成
マップされたコレクションを呼び出すSetCacheable(true)を使用して名前付きクエリを実行すると、2次キャッシュに到達しません。理由はありますか?
より一般的には、名前付きクエリの結果セットを第2レベルのキャッシュに入れる方法はありますか?
ありがとう!
nhibernate - NHibernateの第2レベルのキャッシュからオブジェクトを削除する
私は自分のアプリの1つでNHibernateの第2レベルのキャッシュを使用することを考え始めました。私はおそらくNHibernate.Caches.SysCache.SysCacheProvider
ASP.netキャッシュに依存するを使用します。
キャッシュを有効にすることは問題ではありませんでしたが、キャッシュを管理する方法、たとえば、キャッシュから特定のエンティティをプログラムで削除する方法などについて疑問に思っています。
私のアプリケーションはある種の画像データベースです。ユーザーはバックエンドを介して画像をアップロードし、アクセスしてフロントエンドで画像を表示できます/ImageDb/Show?userId=someUserId
データはあまり頻繁に変更されません。また、変更された場合、ユーザーは、このユーザーのキャッシュされたオブジェクトをキャッシュから削除するバックエンドの「キャッシュをクリア」という名前のボタンを気にする必要はありません。
nhibernatesの第2レベルのキャッシュからすべてのキャッシュされたオブジェクトを削除できるソリューションをオンラインで見つけました。しかし、それは私には少しブルートフォースです... 1人のユーザーが自分のデータのキャッシュをクリアしようとしたという理由だけで、数十人のユーザーのキャッシュ全体をクリアしたくありません。
だから私が基本的にやりたかったのは、C#のnhibernatesの第2レベルのキャッシュからキャッシュされたdbオブジェクトを選択的に削除することです。
これは可能ですか?キャッシュプロバイダーにもよると思います。これがASP.netキャッシュプロバイダーで実行できない場合、私は他の組み込み/オープンソースの提案を受け入れます。
java - 休止キャッシュ戦略
どちらを使用するかをどのように決定CacheConcurrencyStrategy
しますか?
NonstrictReadWriteCache
、ReadOnlyCache
、ReadWriteCache
、TransactionalCache
.
https://www.hibernate.org/hib_docs/v3/api/org/hibernate/cache/CacheConcurrencyStrategy.htmlを読みましたが、十分に詳しく説明していません。
java - jpaエンティティ用にehcache.xmlを構成するか、注釈を使用しますか?
次のようなステートメントを定義するのではなく、ehcacheを使用する場合
使用しているキャッシュプロバイダーに関係なく、エンティティ内で直接定義できますか?
参照: http://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching (EclipseLink に対してのみ表示され、ehcache に対しては表示されませんでした)