在整合的过程中,发现一个问题,session并没有关闭。以下是说明:
[code="java"]protected Session getSession() {
return this.sessionFactory.getCurrentSession();
}[/code]
这是获取session的方法
code="java"this.getSession().get(this.clazz, id)[/code]
这是获取对象的方法
事务在配置文件中进行配置:
[code="java"] class="org.springframework.orm.hibernate4.HibernateTransactionManager">
[/code]
正常的情况来说,获取对象后,session就应该关闭了,可是在后面的测试中发现sesion并没有关闭,仍然可以查询出关联对象。网上说这种session不用手动关闭,请问它何时关闭
建议看下spring容器事务管理,,事务关闭由容器负责
[url]http://jinnianshilongnian.iteye.com/blog/1442376[/url]
[url]http://jinnianshilongnian.iteye.com/blog/1441271[/url] 可以参考这个里边的事务传播图
return this.sessionFactory.getCurrentSession(); 这种形式 session 是会自己关闭的 ,它是需要 事务的配合 ,事务 commit之后 session 就关闭了
[url]http://navylee.iteye.com/blog/1628280[/url]
这个要手动关的!
你把几个概念混淆了。Hibernate和Spring整合之后推荐使用HibernateTemplate这个模板类,它里面封装了Hibernate的Session和相关事务的控制,是不需要我们手动的开关Session的。但是,你的代码里面仍然使用的是Hibernate API中的原始Session(sessionFactory.getCurrentSession()这个语句),这就相当于你用的还是原始的Hibernate,跟整合Spring之前没有一点差别,所以Session的开关还需自己手动控制。希望可以帮到你....
不错,好着