キャッシュされたエンティティ (例: cache-usage="read-write") をロードして更新すると、すぐに SQL UPDATE が発生するようです。
これは私にはとても良いことのようです。
CacheMode を設定すると効果があるようですが、各 hibSession.update() は、設定した CacheMode に関係なく、すぐに SQL UPDATE になります。
SQL UPDATE は、セッションがフラッシュされたとき (tx がここでコミットされたとき) に実行されますが、これは予期された動作です。これを変更できるものは何も見当たらず、CacheModeなぜこの動作を変更したいのか本当に理解できません。つまり、いつUPDATEを実行したいのですか? 取引外?私は何かが欠けているに違いない。明確にできますか?
更新:質問は後書きキャッシュに関するものだったようです。したがって、Terracotta の Hibernate Integrationを引用して明確にします。
後書きキャッシュ
キャッシュについて考えると、次のキャッシュ戦略にたどり着きます。リードスルー キャッシング、ライトスルー キャッシング、ライト ビハインド キャッシングです。Hibernate Second Level キャッシュは Read-Write-Through Cacheであり、キャッシュ ミスが発生した場合、エンティティはデータベースから読み取られ、その後のアクセスのためにキャッシュに渡されます。しかし、H2LC は Write-Behind caching ではありません。Terracotta のディスク永続性と非同期モジュールを使用すると、特定のユースケースで後書きを実装することが非常に効率的になります。現在、Hibernate はデータベースに直接書き込むだけです。代わりに、第 2 レベルのキャッシュと永続的な async-database-queue に書き込むように変更すると、レイテンシが減少し、スループットが劇的に向上します。
後書きは、Hibernate が現在どのように機能するかだけではありません。