Hibernate的Session不会自动关闭
做了一个SSH集成作为开发环境,Service层只是注入了sessionFactory,没有配置事务管理。
发现进行几次操作后就会当掉,但是Tomcat服务没有中断。
?
我首先鉴定是连接没有释放,可能是连接池太小吧,我设置大了仍然不管用。
我想着可能是因为连接是需要手动释放的,于是进行手动关闭来进行验证:
?
事务均采用PROPAGATION_REQUIRED
?
然后每个服务类都配置一个代理对象:
?
在配置Struts2的Action时需要服务类都是用代理对象:
?
这样,每次操作都在不同的事务中,一个事务结束就会由Spring来处理这个已经结束的会话。
?
但是还有一个问题,在服务层你的会话结束了,但是在前台可能使用是一个Hibernate代理对象,就是说没有实际去查询数据,这就需要你的对象不能进行懒加载。
?
查询时在服务层直接把对象查询出来,不然你到JSP页面去取值时会报错
org.hibernate.LazyInitializationException: could not initialize proxy - no Session?
当然我这只是简单配置下做个测试,对于Spring的事务配置那是有很多种方式的,回头我再总结一下给大家分享!