HQL
クエリがどこから情報を取得するかを理解するのに苦労しています。私のプロジェクトは異なるスレッドを使用しており、各スレッドはデータベースに対して読み取り/書き込みを行います。スレッドは Session オブジェクトを共有しません。代わりに、HibernateUtil
セッションを作成するクラスを使用しています。
最近まで、セッションを閉じたのは書き込み後だけで、読み取り後ではありませんでした。オブジェクトへの変更はすぐにデータベースに表示されますが、他のスレッド (書き込みに使用されたものとは異なるセッション オブジェクト) で読み取ると、古い情報が取得されます。読み取りと書き込みは常に異なるスレッドで行われます。つまり、異なる Session オブジェクトと異なるセッション キャッシュを意味します。
HQL
の代わりにを使用することで、セッション キャッシュではなく、常にデータベース (または第 2 レベルのキャッシュ) をターゲットにしているといつも思っていましたCriteria
が、コードをデバッグしているときに、HQL がセッション キャッシュ内のオブジェクトを探していることが明らかになりました。古い時代遅れのオブジェクトを取得しました。
HQL
常にデータベースをターゲットにしていると仮定したのは間違っていましたか? または、少なくとも第 2 レベルのキャッシュですか?
PS: 私は 1 つのSessionFactory
オブジェクトのみを使用しています。