1

質問はGrails GORMプログラミングのコンテキストにありますが、実際に実際の違いがある場合、他のHibernateの使用における状況を知ることは興味深いでしょう.

ロックで選択されていないオブジェクトを保存しようとすると、データベース オブジェクトが別のスレッド/アプリケーションによって同時に更新された場合、StaleObjectStateException が発生する可能性があります。Hibernate のドキュメントによると、このような例外の後、セッション全体が使用できなくなります。これは、この例外が何らかの形でセッションの状態を台無しにする可能性があるためです。このセッションで開かれたすべてのオブジェクトは、実際には別のスレッドによって変更されていなくても、使用できなくなったようです。論理的には機能するはずですが、同じセッション内のオブジェクトを .refresh()/modify/.save() することさえできないようです。

では、セッションが中断された場合はどうなりますか?また、それに対処するための推奨される方法はありますか? オブジェクト自体を再選択することは問題ではありませんが、そのセッションで選択された他のすべてのオブジェクトが使用できなくなるという事実は非常に問題です。これらのオブジェクトを大量にロードし、異なる場所のメモリに保持する複雑なメソッドがあります。例外の後でこれを処理するにはどうすればよいですか? オブジェクトの 1 つがこの例外を受け取ったときに、メソッドが実行したすべてをロールバックしたくありません。セッション/オブジェクトを操作可能な状態に保つ方法があれば、ロジックはそれを処理するのに十分スマートです。それらの1つが別のスレッドによって更新されたという理由だけで、メモリ内のすべてのオブジェクトを調べて、どうにかして更新する必要がありますか?

StatelessSession は考慮すべきものですか?

また、ここで何かが足りないのでしょうか?StaleObjectStateException については多くの質問が寄せられていますが、これを懸念事項として挙げているものはほとんどありませんか? 同じセッションで選択されたオブジェクトのうちの 1 つがバックグラウンドで更新されただけでランダムに使用できなくなるという事実は、非常に不便なことではありませんか?

4

0 に答える 0