如果不关闭就会缓存大量持久对象,影响性能。
如果关闭spring又是怎么实现声明式事务处理的呢?
6 个解决方案
#1
是否关闭session,看下源码吧
hibernateTemplate.find()的调用过程如下
find--executeWithNativeSession--doExecute,看下源码
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
就是在这里关闭的session,可以继续跟踪
hibernateTemplate.find()的调用过程如下
find--executeWithNativeSession--doExecute,看下源码
protected Object doExecute(HibernateCallback action, boolean enforceNewSession, boolean enforceNativeSession)
throws DataAccessException {
......
finally {
if (existingTransaction) {
logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate");
disableFilters(session);
if (previousFlushMode != null) {
session.setFlushMode(previousFlushMode);
}
}
else {
// Never use deferred close for an explicitly new Session.
if (isAlwaysUseNewSession()) {
SessionFactoryUtils.closeSession(session);
}
else {
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
}
}
}
}
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
就是在这里关闭的session,可以继续跟踪
#2
哈!Spring真的好耐无用过拉!楼主是不是用到了级联查询啊!其实想Session初始化对象可以用opensessioninview!很方便由Spring控制session的关闭!因为太耐无用,具体自己上Google查下!讲真用Hibernate真得无你想象中那样强大!
#3
#4
就想1楼所说,进入SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
后,这个方法就可以关闭session。
后,这个方法就可以关闭session。
#5
1楼分析的很好。
#6
就想1楼所说,进入SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
后,这个方法就可以关闭session。
后,这个方法就可以关闭session。
#1
是否关闭session,看下源码吧
hibernateTemplate.find()的调用过程如下
find--executeWithNativeSession--doExecute,看下源码
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
就是在这里关闭的session,可以继续跟踪
hibernateTemplate.find()的调用过程如下
find--executeWithNativeSession--doExecute,看下源码
protected Object doExecute(HibernateCallback action, boolean enforceNewSession, boolean enforceNativeSession)
throws DataAccessException {
......
finally {
if (existingTransaction) {
logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate");
disableFilters(session);
if (previousFlushMode != null) {
session.setFlushMode(previousFlushMode);
}
}
else {
// Never use deferred close for an explicitly new Session.
if (isAlwaysUseNewSession()) {
SessionFactoryUtils.closeSession(session);
}
else {
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
}
}
}
}
SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
就是在这里关闭的session,可以继续跟踪
#2
哈!Spring真的好耐无用过拉!楼主是不是用到了级联查询啊!其实想Session初始化对象可以用opensessioninview!很方便由Spring控制session的关闭!因为太耐无用,具体自己上Google查下!讲真用Hibernate真得无你想象中那样强大!
#3
#4
就想1楼所说,进入SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
后,这个方法就可以关闭session。
后,这个方法就可以关闭session。
#5
1楼分析的很好。
#6
就想1楼所说,进入SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory());
后,这个方法就可以关闭session。
后,这个方法就可以关闭session。