81,092
社区成员
发帖
与我相关
我的任务
分享
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();
}
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)