-
hibernate用于web的项目时,不停刷新得到不同结果!5
hibernate用于web开发的时候遇到这样一件怪事,在页面上删除或添加一条记录后,查询所有记录时,时而有这条记录,时而又没有这条记录,不停刷新得到不同结果,困扰我好几个月了,眼看项目要交付了,问题还没解决,急啊!!
注:
1)删除或添加一条记录时,数据库的操作没问题(通过查看数据库得知)
2)每次操作没有关闭session,而是session和本地线程绑定
3)每次我都调用了clear方法,清除一级缓存,所以排除缓存问题
4)不是浏览器缓存的问题,因为在每次刷新页面的时候我在后台输出的记录sum也是时而变化
谢谢同行们给出指点!
5)我的数据库用mysql.
问题补充:
我做一样的操作,每次就load一个对象,比如一个客户信息,然后再导航出他所关联的订单orders显示在页面上.我的session与ThreadLocal绑定了.但是我通过多次这样的操作,session没法取得同一对象.
问题补充:
数据库操作没有问题的.所有的增删改都正确处理了.问题是我每次作查询时用的getSession()得到的session没法保证一样.事实就是每次得到的session对象并没有与ThreadLocal对象绑定.
public static Session getSession() throws CommonException {
Session s = (Session) threadSession.get();
try {
if (s == null) {
log.debug("Opening new Session for this thread.");
if (getInterceptor() != null) {
log.debug("Using interceptor: " + getInterceptor().getClass());
s = getSessionFactory().openSession(getInterceptor());
} else {
s = getSessionFactory().openSession();
}
threadSession.set(s);
}
} catch (HibernateException ex) {
throw new CommonException(ex);
}
System.out.println("========="+s.hashCode());
return s;
}
问题补充:
我在浏览器里多点几次刷新.s.hashCode()输出没有都一样.
=========16782576
=========16782576
=========16782576
=========16782576
=========16782576
=========16782576
=========14649554
=========14649554
=========14649554
=========14649554
=========16782576
=========16782576
问题补充:
谢谢各位的回答
现在我的问题是:
在只做查询情况下,不做session关闭,我的ThreadLocal对象无法跟session一一对应.
如上面我多次做查询操作:
每次(查询)取session的时候我打印出了他的hashcode出来.
1.前6次查询取到的是同一个session.他的hashcode是16782576
2.然后从第7次到第10次是另一个session了.他的hashcode值是14649554
3.再刷新(也就是再作查询操作),11和12次.跟前6次查询又是同一个session.他的hashcode值也是16782576.
说简单一点就是:
Session s = (Session)threadLocal.get();
if(s==null){
s = getSessionFactory().openSession();
threadLocal.set(s)
}
return s;
多次执行以上代码没法保证返回的是同一session对象(在其他地方没有做session的关闭操作 )
问题补充:
我打开一个浏览器发送一次请求?是不是在服务器端创建了一个线程?我如何能确保一个threadLocal中只存在着一个session呢?2008年6月24日 16:16
6个答案 按时间排序 按投票排序
-
1 我认为你出现的问题与是否是同一个session无关,而是其他问题。
2 每次session不同是很正常的,因为你每发一个request到服务器,服务器都会启动一个线程处理servelt,而你的session由于线程绑定所以每个线程的session不同是很正常的。你可以试想一下如果session被你的servlet调用的同时,有其他人访问这个应用,怎么办?当然是session工厂给他分配另一个session了。所以session的hashcode不同是正常的。2008年6月25日 15:05
-
如果你用hql="delete ...."然后用session.executeUpdate(),不会清除一级缓存和二级缓存.改成session.delete(实体)
2008年6月24日 20:11
相关推荐
**Struts + Hibernate Web小项目详解** 在Java Web开发领域,Struts和Hibernate是两个非常重要的框架,它们分别处理表现层(Presentation Layer)和持久层(Persistence Layer)的任务。本项目是一个基于Struts和...
Spring MVC、Hibernate 和 Maven 是Java Web开发中的三个关键框架,它们各自在应用程序的不同层面发挥着重要作用。本项目是一个综合性的实例,将这三个框架整合在一起,为开发者提供了一个完整的Web应用程序开发环境...
Hibernate Web应用的开发一般经过以下几个步骤: (1)创建数据库。 (2)将Hibernate所需的JAR包复制到WEB-INF/lib下。 (3)创建Hibernate的配置文件。 (4)利用Hibernate的第三方工具或Eclipse的有关插件从...
在这个"基于Hibernate/DWR框架实现的Web项目"中,我们可以看到开发者利用了Java Web开发的强大工具,包括Hibernate作为持久层框架,Direct Web Remoting (DWR)作为前端与后端交互的桥梁,以及Oracle数据库作为数据...
这是一个基于Java Web技术栈开发的个人日程管理项目——MyPlan。该项目采用了Spring MVC、Hibernate和Spring框架,利用注解方式进行编程,同时整合了FusionCharts图表库来展示数据。以下是对这个项目的关键知识点的...
在这个特定的项目中,我们看到“web小项目初步整合hibernate”的主题,这意味着开发者正在尝试将流行的Java ORM(对象关系映射)框架Hibernate融入到他们的Web应用中。Hibernate是一种强大的工具,它简化了数据库...
【标题】"Hibernate Web项目必备" 指的是在构建基于Web的应用程序时,使用Hibernate作为持久层框架的必要组件和技巧。Hibernate是Java开发中的一款流行对象关系映射(ORM)工具,它允许开发者使用面向对象的方式处理...
Struts和Hibernate是Java Web开发中的两个重要框架,它们在构建高效、可维护的Web应用程序时发挥着关键作用。这个“Struts+Hibernate项目”旨在为开发者提供一个学习和实践的平台,帮助他们快速理解这两种框架的集成...
应用SpringMVC与Hibernate进行WEB开发,是一种现代的、高效的Web应用程序开发方法,结合了SpringMVC框架的灵活性和Hibernate的持久化能力。下面将详细阐述这两种技术的关键知识点及其在Web开发中的应用。 ### ...
Spring MVC和Hibernate是两个非常重要的框架,它们分别用于处理Web应用程序的表示层和持久层。在这个主题中,我们将深入探讨如何将这三个组件整合在一起创建一个完整的Web项目。 首先,**Maven** 是Apache开发的一...
**hibernate_third项目源码**是一份专用于展示Hibernate框架不同查询技术的代码实例,涵盖了query、criteria以及SQL查询等多种方法。通过深入理解和实践这些源码,开发者可以更好地掌握Hibernate在实际开发中的应用...
Struts+Spring+Hibernate(SSH)是一个经典的Java Web开发框架组合,用于构建高效、可扩展的企业级应用程序。在这个学生班级管理Web项目中,SSH框架被用来实现对学生信息和班级信息的有效管理和操作。以下是对SSH...
**Spring+Hibernate+Extjs项目实例详解** 在Java企业级应用开发中,Spring、Hibernate和Extjs这三种技术的组合非常常见,形成了所谓的"SSH+Extjs4"框架。这个项目实例是基于这些技术实现的一个典型应用,展示了如何...
7. **技术栈**:除了Hibernate和JSP,项目可能还涉及其他技术,如Spring框架(提供依赖注入和AOP)、MySQL数据库、Tomcat应用服务器、JavaScript和jQuery用于前端交互,以及CSS和HTML构建用户界面。 通过这样的项目...
标题中的"idea工具创建的Spring+SpringMVC+Hibernate+maven项目"指的是使用IntelliJ IDEA这个集成开发环境(IDE)构建的一个Java Web项目,该项目整合了四个关键的技术框架:Spring、SpringMVC、Hibernate以及Maven...
在学习和使用这个项目实例时,你需要理解每个框架的核心概念和工作原理,如Struts2的动作(Action)和结果(Result),Hibernate的实体(Entity)、会话(Session)和查询,以及FreeMarker的模板语法。此外,还需要...
总的来说,"Struts2 Hibernate实现的项目"是一个全面的J2EE学习案例,涵盖了Web开发中的许多关键概念和技术,对提升开发者在Java Web领域的技能大有裨益。通过分析和实践该项目,不仅可以了解这两个框架的结合使用,...
**Hibernate 在线考试项目** 该项目是一个基于 Hibernate 的 Java 在线考试系统,专为初学者设计,旨在帮助他们深入了解 Hibernate 框架以及如何在实际项目中应用。通过参与这个项目,学习者可以学习到以下关键知识...
【hibernate项目源代码】是一个专门为初学者设计的学习资源,旨在帮助他们深入理解并熟练掌握Hibernate框架。Hibernate是一个开源的对象关系映射(ORM)工具,它简化了Java应用程序与数据库之间的交互,使得开发者...