浏览 9781 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-06-27
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-06-27
我的理解(没有试)
session的断开应该跟事务相关,请尝试用事务模板进行相关操作, 或者通过beanfactory获取已经启用事务的bean来进行相关操作, |
|
返回顶楼 | |
发表时间:2005-06-27
如果用了spring+hibernate,怎么没有用到spring的事务控制呢?如果没有用到事务控制的话,通过getHibernateTemplate()...再找到Connection
|
|
返回顶楼 | |
发表时间:2005-06-28
是啊.我也有些疑问.session是如何断开的呢?
|
|
返回顶楼 | |
发表时间:2005-06-28
session的断开是在org.springframework.orm.hibernate.SessionFactoryUtils中处理的。
如果应用程序使用了OpenSessionInViewFilter或者OpenSessionInViewInterceptor,那么所有的打开过的session会注册在ThreadLocal里。在当前线程退出前,OpenSessionInViewFilter或者OpenSessionInViewInterceptor将会负责断开这些session。 如果应用程序没有应用OpenSessionInViewFilter或者OpenSessionInViewInterceptor,那么只要该session没有Transaction就直接关闭。否则在transaction结束后关闭。 |
|
返回顶楼 | |
发表时间:2005-06-29
我的服务器出现了“unclosed connection,forgot to call close() on your session?”我该怎么办呢?
|
|
返回顶楼 | |
发表时间:2005-07-01
我想是不是因为你没有对这些操作进行事务管理?getHibernateTemplate()成功之后session是自动断开的,加上OpenSessionInView也是一样,只不过就是一次请求之后断开,是不是你没有配置事务呢?
|
|
返回顶楼 | |
发表时间:2005-07-04
同意楼上的说法, 可以参考 spring中hibernateTempleate.java 源代码中的
execute() 方法 如小: 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()); } } |
|
返回顶楼 | |