OpenSessionView是用来减决Hibernate懒加载问题,如果在程序使用了load/iterator等方法时,程序并不会马上向数据库发出SQL,等你在前台页面获取时,此时session已经早就关闭(因为事务一般都是在service层),会出现错误。如果程序没有使用事务,如果在程序中进行了更新删除操作,那么也是不允许的,因为spring中默认事务是只读事务,这样也会出现错误。可以在DAO设置,HibernateTemplate有一个变量可以查看源码。spring中已经自动支持了getCurrentSession(),请不要在Hibernate配置hibernate.current_session_context_class为“Thread”否则也会出错
你这个问题:
1,spring3整合hibernate4,在dao中都是使用getcurrentsession()来得到session;
2,dao中使用完了session,不要close();
3,在service中开启事务,随便你使用@transactional标签还是用xml做aop都可以;注意必须开启事务,要不getcurrentsession()方法得到的session使用会报错;
4,在web.xml中开启opensessioninviewfilter。注意使用org.springframework.orm.hibernate4.support.opensessioninviewfilter。
就可以了。
用户登录
还没有账号?立即注册
用户注册
投稿取消
文章分类: |
|
还能输入300字
上传中....