2008年1月15日火曜日

Hibernateのキャッシュ

Hibernateにはキャッシュ機能がありload()、get()を行うと自動的にインスタンスがキャッシュされる。
そのため、インスタンスのdelete()後にget()を行うとdelete()したはずのデータがキャッシュから取得されてしまう。
PrimaryKeyからget()してデータの有無を判定するコードでこの問題が判明。

キャッシュを回避するためにget()ではなくcountのHQLで有無を判定するように変更
(インスタンスを取得するわけではないので、これならキャッシュされない!!)。

データの有無をの判定だけなので、これで問題ない