org.hibernate.SessionException: Session is closed!第一次可以运行,第二次就报错

sw19810913 2010-05-11 11:47:07
第一次运行,可以显示数据列表,然后再刷新就报错:org.hibernate.SessionException: Session is closed!
点删除、修改还是报这个错
用的open session inview模式

web.xml配置如下:
<!-- 过滤器,使session在页面加载完后关闭 -->
<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>com.util.HibernateSessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

HibernateSessionFilter类配置如下:
public class HibernateSessionFilter implements Filter {
private Transaction tx ;
private SessionFactory sessionFactory;
public void destroy() {
sessionFactory.close();
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//在用户发出请求的时候获得session对象
try {
Session session = sessionFactory.getCurrentSession();
tx = session.beginTransaction();
chain.doFilter(request, response);
tx.commit();
} catch (HibernateException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
if (tx.isActive()) { //如果事务存活,发生违例
tx.rollback();
}
}
}
public void init(FilterConfig arg0) throws ServletException {
//初始化
sessionFactory = HibernateSessionFactoryUtil.getSessionFactory();
}
}
servlet中调用:
public void list(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<GuestBook> list = dao.findAllOrderById();
request.setAttribute("admin.list", list);
request.getRequestDispatcher("/admin/secure/list.jsp").forward(request, response);
}
GuestBookDaoHibernate 类:
public class GuestBookDaoHibernate extends GenericDaoHibernate<GuestBook, Integer> implements GuestBookDao {

private Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
public List<GuestBook> findAllOrderById() {
Query query = session.createQuery("from GuestBook order by id desc");
return query.list();
}
}
通用的类:
public class GenericDaoHibernate<T,PK extends Serializable> implements GenericDao<T,PK> {
private Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
private Class<T> clazz;
public GenericDaoHibernate(){
//获取持久化对象clazz的真正类型
//通过反射 获取反射当中擦拭法获取泛型的真正类型
clazz = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
}
public void delete(T entity) {
session.delete(entity);
}
public List findAll() {
Query query = session.createQuery("from " + clazz.getName());
return query.list();
}
public T findById(PK id) {
return (T)session.get(clazz, id);
}
public T save(T entity) {
session.save(entity);
return entity;
}
public void update(T entity) {
session.update(entity);
}
}
接口:
public interface GuestBookDao extends GenericDao<GuestBook, Integer>{
public List<GuestBook> findAllOrderById();
}
...全文
1036 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengchengwanlirwx 2011-04-25
  • 打赏
  • 举报
回复
看下这篇文章吧http://www.17od.com/2006/11/06/using-managed-sessions-in-hibernate-to-ease-unit-testing/
pengchengwanlirwx 2011-04-25
  • 打赏
  • 举报
回复
把getCurrentSession(),改为openSession()就行了,不过这样好像很占用资源
SustPhenex 2011-01-12
  • 打赏
  • 举报
回复
你解决了没有?我现在也是这个问题
sw19810913 2010-05-11
  • 打赏
  • 举报
回复
我是跟着 v512 北京新科海学校
刘伟出的 《Hibernate实战与开发》 这本书练的,现在到第五章就出现这个问题没法解决了

有现在在练这个Hibernate的同学吗?

网上找了很久找不到结果!第一次可以运行,可以显示信息,但再点刷新或者点删除更新就报错

我跟着刘伟老师的视频练的,但他的可以运行,我的就不可以,郁闷~!
错误:
org.hibernate.SessionException: Session is closed!
at org.hibernate.impl.AbstractSessionImpl.errorIfClosed(AbstractSessionImpl.java:72)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:901)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:842)
at org.hibernate.impl.SessionImpl.get(SessionImpl.java:835)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:342)
at $Proxy0.get(Unknown Source)
at com.dao.hibernate.GenericDaoHibernate.findById(GenericDaoHibernate.java:36)
at com.servlet.ManageServlet.delete(ManageServlet.java:72)
at com.servlet.ManageServlet.doPost(ManageServlet.java:35)
at com.servlet.ManageServlet.doGet(ManageServlet.java:23)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:18)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:34)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧