0

私は休止状態、春、jpaを使用しています。ワークフローでエンティティを更新します。ただし、これらの更新は別のワークフローでは利用できません。サーバーを再起動すると、正常に動作します。

エンティティを更新する方法はありますか。休止状態にキャッシュから削除するように依頼します.そのオブジェクトが他のワークフローで必要になったときに、新しいクエリが作成されるようにしますか?

4

1 に答える 1

1

これは、同じアプリに対して 2 つの個別のセッションがあり、したがって 2 つの第 1 レベルのキャッシュがあるように聞こえます。第 1 レベルのキャッシュは、セッションのコンテキストで Hibernate が使用するキャッシュです。したがって、セッションを閉じたりクリアしたりしないと、これは成長し続け、他の第 1 レベルのキャッシュ (他のスレッドまたは他の VM) と競合する可能性があります。環境を指定していないため、そうであるかどうかはわかりませんが、別のセッションの第 1 レベル キャッシュを変更することはできません。

これを回避する最善の解決策は、(アプリケーション サーバーからの) マネージド EntityManager を使用してエンティティを処理することです。この種のシナリオに対処するのはサーバーの役割です。しかし、「春のやり方」でやっているように見えるので、手動で行う必要があります。使用後にセッションをクリアするか、データの読み取り/更新の前にリフレッシュを行います。次に、別のスレッドから変更された可能性のある情報を失わないように、ある種のロック (悲観的/楽観的) が必要になります。

于 2012-07-08T09:04:58.190 に答える