hibernate里的session一级缓存,当一个用户通过get()load()等方法从数据库拿到某条数据,数据被缓存,此时第二个用户修改该条数据,数据库该数据被修改,此时第一个用户再get()该数据,从缓存中拿到数据,拿到的并不是实时的数据而是缓存的数据。这样想对不对?应该怎么解决?
学习是最好的投资!
そうです。セッションが閉じられて再度開かれるとすべてのキャッシュが失われるため、セッションは通常非常に短くなります。
evict() または clear() を使用してセッション内のキャッシュを更新できます
Session インターフェースは、refresh() メソッドを定義します。このメソッドを呼び出すと、get() メソッドまたはload() メソッドを呼び出すことができます。
最新データの取得方法は上記で説明しました。私の提案は、セッションが最初にデータベース トランザクションに対応し、トランザクションの実行時間をできるだけ短くすることです。第 2 に、セッション中に他の場所で変更されるデータについては、ある程度のトランザクションの失敗とロールバックが許容される場合には、楽観的なロックを使用することが正式な解決策となります。それ以外の場合は、元の悲観的なロックを検討することができます。実際の解決策はポスターに記載されています。アプリケーションでどの方法を使用するかを検討するのはあなた次第です。
そうです。セッションが閉じられて再度開かれるとすべてのキャッシュが失われるため、セッションは通常非常に短くなります。
evict() または clear() を使用してセッション内のキャッシュを更新できます
Session インターフェースは、refresh() メソッドを定義します。このメソッドを呼び出すと、get() メソッドまたはload() メソッドを呼び出すことができます。
最新データの取得方法は上記で説明しました。私の提案は、セッションが最初にデータベース トランザクションに対応し、トランザクションの実行時間をできるだけ短くすることです。第 2 に、セッション中に他の場所で変更されるデータについては、ある程度のトランザクションの失敗とロールバックが許容される場合には、楽観的なロックを使用することが正式な解決策となります。それ以外の場合は、元の悲観的なロックを検討することができます。実際の解決策はポスターに記載されています。アプリケーションでどの方法を使用するかを検討するのはあなた次第です。