当前位置 > 首页 > Java

Hibernate 利用无状态session 解决大批量上传、修改数据缓慢的问题

11/17/2011 9:48:00 PM来源:Java

在最近的SSH项目里面需要做大量数据上传(上万条数据的insert),而问题的现象就是刚开始速度很快,每秒几十条,随时时间越往后上传速度越慢,最后只有每秒一条。Web服务器的CPU占有率和内存都进行过调查,没有问题,代码也进行了无数次的优化,问题还是没有解决。最后才发现原来是Hibernate的Session的问题。最后使用StatelessSession,问题解决。

?

StatelessSession (无状态session)接口

?

利用无状态session,可以解决:大批量上传、修改数据缓慢的问题。

?

注:StatelessSession在Hibernate3.3.2中有,我知道3.0中没有,其他的不知道

?

作为选择,Hibernate提供了基于命令的API,可以用detached object的形式把数据以流的方法加入到数据库,或从数据库输出。StatelessSession没有持久化上下文,也不提供多少高层的生命周期语义。特别是,无状态session不实现第一级cache,也不和第二级缓存,或者查询缓存交互。它不实现事务化写,也不实现脏数据检查。用stateless session进行的操作甚至不级联到关联实例。stateless session忽略集合类(Collections)。通过stateless session进行的操作不触发Hibernate的事件模型和拦截器。无状态session对数据的混淆现象免疫,因为它没有第一级缓存。无状态session是低层的抽象,和低层JDBC相当接近。

StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
??
ScrollableResults customers = session.getNamedQuery("GetCustomers")
??? .scroll(ScrollMode.FORWARD_ONLY);
while ( customers.next() ) {
??? Customer customer = (Customer) customers.get(0);
??? customer.updateStuff(...);
??? session.update(customer);
}
??
tx.commit();
session.close();

?

注意在上面的例子中,查询返回的Customer实例立即被脱管(detach)。它们与任何持久化上下文都没有关系。

StatelessSession 接口定义的insert(), update() 和 delete()操作是直接的数据库行级别操作,其结果是立刻执行一条INSERT, UPDATE 或 DELETE 语句。因此,它们的语义和Session 接口定义的save(), saveOrUpdate() 和delete() 操作有很大的不同。



  • Linux下配置免安装版Tomcat

    2/6/2011 2:51:00 PM

    一、下载免安装版 Tomcat 打开 Tomcat 主页http:// tomcat .apache.org/,下载 Tomcat 免安装版,我这里下载的是apache- to

  • tomcat运行时动态加载,实现热部署(摘自网络)

    11/16/2010 5:36:00 PM

    以前指导别人做过,可惜那时项目太忙了自己事情太多,不是自己亲自去做的, ? ?不重起 tomcat 的情况下改变应用程序,实现热部署 在 tomcat 中的conf目录的server.

  • SSH+SQLSERVER2005在spring中简单配置

    10/17/2010 10:27:00 AM

    ? <bean id=dataSource class=org.apache.commons.dbcp.BasicDataSource> <property name=dri

  • ant tomcat 的build.xml

    8/22/2011 4:52:00 PM

    <?xml version=1.0 encoding=GBK?> <project basedir=. default=publish name=TaskWorker>

  • Ubuntu下安装tomcat

    9/12/2010 12:23:00 AM

    首先,确定已经安装了jdk并设置好JAVA_HOME环境变量。 然后,在http:// tomcat .apache.org/上下载得到apache- tomcat -6.0.29.tar

  • [转载]Tomcat简介之三

    10/20/2011 5:08:00 AM

    原文地址: Tomcat 简介之三 作者: JAVA狼 Tomcat 简介之三 作者:杨晓( http://blog.sina.com.cn/u/123728

  • spring和hibernate的集成(编程式事物)

    11/18/2010 5:47:00 AM

    openSession和getCurrentSession的区别? *openSession必须关闭,currentSession在事物结束后自动关闭 *openSession没有和当前线

  • (转)class 'org.springframework.orm.hibernate3.LocalSessionFactoryBean

    11/10/2011 4:04:00 PM

    在做Spring+Struts+ Hibernate 时,在刚增加了 Hibernate 开发能力后,增加Spring开发能力时,applicationContext.xml产生错误:cla

  • Struts2.1.8 Project Dependencies

    9/24/2010 11:51:00 AM

    struts 2 commons-logging-1.0.4.jar 主要用于日志处理 freemarker-2.3.8.jar 模板相关操作需要包 ognl-2.6.11.jar ognl

  • hibernate自动生产hbm.xml文件

    8/15/2011 12:57:00 PM

    1.在项目上点击右键选择MyEclipse选项,为应用增加 Hibernate 特性. 2.在出现的配置窗口中,选中“Add Hibernate 2.1 libraries topro