Hibernate は Session.list() から取得した結果をキャッシュしますか? 私が信じているのは、session.get()またはsession.load()メソッドが結果をメモリにキャッシュすることですが、session.list()は、メモリの問題を引き起こす可能性のある多くのレコードを生成するためではありませんが、取得してロードする場合単一のオブジェクトのみを生成します。
1 に答える
0
注意しないと、実際にはメモリの問題が発生します。
しかし、その前に別の限界に達するでしょう: パフォーマンス...
トランザクション内で Hibernate がロードするものはすべて、コンテキストに保存されます。オブジェクトをロードしようとするたびに、コンテキストがまだ存在しないかどうかを最初に確認します。コンテキストに多数のエンティティを格納すると、パフォーマンスが大幅に低下します (複雑な理由により、ここでは詳しく説明しません)。
Hibernate がこれを行わなかった場合、同じエンティティの多数のインスタンスが返され、データが重複していました。それらを更新すると、どのデータをデータベースに保持するかを知ることができなくなります。
経験則:トランザクションを短くするかevict()
、エンティティが不要になった場合はできるだけ早くコンテキストから削除します。
PS: 「キャッシュ」とは呼ばれません。セッションは、ORM タスクを正しく実行するために必要なコンテキストです。二次キャッシュ ライブラリがありますが、それはまったく別のものです。
于 2017-04-01T04:52:43.320 に答える