Seasar Hot Deployとhibernate
SAStrutsとhibernateで開発開始した・・・が、いきなり壁にあたった。Session#saveメソッドで保存するのだが、1度目は成功するのに、2回目以降失敗する。。
org.hibernate.PropertyAccessException: could not get a field value by reflection getter of com.example.mm.bookstore.entity.Book.initPrice at org.hibernate.property.DirectPropertyAccessor$DirectGetter.get (DirectPropertyAccessor.java:35) at org.hibernate.property.DirectPropertyAccessor$DirectGetter.getForInsert (DirectPropertyAccessor.java:40)
Cool Deployにするとエラーは起きない。Hot DeployとHibernateの組み合わせの問題の様だ。
Hot Deployはリクエスト毎にクラスをロードしなおしているみたいなので、おそらくhibernate内に古いClassだのFieldだのがキャッシュされているのが原因だと推測しているのだが・・さて。
リクエスト毎にhibernateも初期化しなきゃならんのかな?やだな。
追記>>
とりあえずENV==ctのときだけSessionFactoryのinstance属性をrequestにした。いまのところパフォーマンスも気になるほどではない。しばらくこれでいくか。