OpenSessionInViewFilter 的配置及替代方案

推荐阅读的文章:

1.http://zhan.zhmy.com/archives/2006/73716.html

2.http://blog.csdn.net/yeshanghai_c/article/details/10140463(比较详细)


我遇到的问题:

1.在没有打开OpenSessionInViewFilter 的情况下,会出现延迟加载的异常,因为在显示层来调用延迟加载的代理类,由于session已经关闭了,所以不能够获得到实际的对象;

2.在打开OpenSessionInViewFilter 的情况下,在不进行相关处理的情况下,只能够查询,不能做一些save、update、delete的操作,因为:

OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。然后把该sessionFactory绑定到 TransactionSynchronizationManager,使request的整个过程都使用同一个session,在请求过后再解除该 sessionFactory的绑定,最后closeSessionIfNecessary根据该 session是否已和transaction绑定来决定是否关闭session。在这个过程中,若HibernateTemplate 发现自当前session有不是readOnly的transaction,就会获取到FlushMode.AUTO Session,使方法拥有写权限。

解决方案:一、可以采用在写保存更新删除代码的时候手动更改FlushMode

session.setFlushMode(FlushMode.AUTO);     

session.save(user); 
         session.flush();


二、第二种方式是采用spring的事务声明 

三、或可以在web.xml中过滤器openSession修改初始参数:

  1. <init-param>     
  2.  <param-name>flushMode</param-name>      
  3.  <param-value>AUTO</param-value>      
  4.  </init-param>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值