主题:实现弄不明白OpenSessionInView方式有什么大作用?
时间: 2020-08-27来源:ITEYE
前景提要
pikachu 写道
huaronghu 写道
看了很多人在讨论OpenSessionInView方式,其实Spring也内置用ThreadLocal来管理Hibernate session,那我就明白了,使用了OpenSessionInView方式了之后,有什么作用?

使用Spring集成的hibernate就需要使用HibernateTemplate(或者他的aop形式).HibernateTemplate会尽量早的关闭session
public Object execute(HibernateCallback action, boolean exposeNativeSession); throws DataAccessException { Session session = getSession();; boolean existingTransaction = SessionFactoryUtils.isSessionTransactional(session, getSessionFactory(););; if (!existingTransaction && getFlushMode(); == FLUSH_NEVER); { session.setFlushMode(FlushMode.NEVER);; } try { Session sessionToExpose = (exposeNativeSession ? session : createSessionProxy(session););; Object result = action.doInHibernate(sessionToExpose);; flushIfNecessary(session, existingTransaction);; return result; } catch (HibernateException ex); { throw convertHibernateAccessException(ex);; } catch (SQLException ex); { throw convertJdbcAccessException(ex);; } catch (RuntimeException ex); { // callback code threw application exception throw ex; } finally { SessionFactoryUtils.closeSessionIfNecessary(session, getSessionFactory(););; } }

极端情况下是每执行一个事务就关闭一次.

如果hibernate配成lazy的话铁定报错,因为最后所需要的数据往往是到view才完全拉下来,而view代码通常不会处于事务中,所以要配置OpenSessionInView.让session一直开到view代码运行完把数据往客户端发送. 这和使用 Hibernate的 HibernateCallBack 回调方法效果是一样的吧,他也可以在一个Session里面操作,就是内部类不是很习惯

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行