ほげにっき

hogedigoの日記

Seasar Hot Deployとhibernate

SAStrutshibernateで開発開始した・・・が、いきなり壁にあたった。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にした。いまのところパフォーマンスも気になるほどではない。しばらくこれでいくか。