Hibernate大数据量操作解决方案

转载 2007年09月16日 00:04:00
 
阅读了Hibernate的Reference之后,可以采用批量处理的方法,当插入的数据超过10000时,就flush session并且clear。
下面是一个测试method。
 1 /**
 2      * 测试成批插入数据的事务处理,返回是否成功
 3
     * 
 4      *  @param
 objPO Object
 5      *  @return
 boolean
 6       */

 7      public   boolean  insertBatch( final  Object objPO)  {
 8          boolean  isSuccess  =   false
;
 9         Transaction transaction  =   null
;
10         Session session  =
 openSession();
11          try  
{
12             transaction  =
 session.beginTransaction();
13              for  ( int  i  =   0 ; i  <   100000 ; i ++
{
14
                session.save(objPO);
15                  if  (i  %   50   ==   0
{
16                      //  flush a batch of inserts and release memory

17                     session.flush();
18
                    session.clear();
19                 }

20             }

21             transaction.commit();
22             logger.info( " transaction.wasCommitted: "

23                      +  transaction.wasCommitted());
24             isSuccess  =   true
;
25         }
  catch  (HibernateException ex)  {
26              if  (transaction  !=   null
{
27                  try  
{
28
                    transaction.rollback();
29                     logger.error( " transaction.wasRolledBack: "

30                              +  transaction.wasRolledBack());
31                 }
  catch  (HibernateException ex1)  {
32
                    logger.error(ex1.getMessage());
33
                    ex1.printStackTrace();
34                 }

35             }

36             logger.error( " Insert Batch PO Error: "   +  ex.getMessage());
37
            ex.printStackTrace();
38         }
  finally   {
39              if  (transaction  !=   null
{
40                 transaction  =   null
;
41             }

42             session.close();
43         }

44          return  isSuccess;
45     }

46

这只是简单的测试,实际项目中遇到的问题,要比这个复杂得多。
这时候,我们可以让Spring来控制Transaction,自己来控制Hibernate的Session,随时更新数据。
首先,利用HibernateDaoSupport类来自定义个方法打开Session;
1public Session openSession(){
2
        
3        return
 getHibernateTemplate().getSessionFactory().openSession();
4
        
5    }
然后,用打开的Session处理你的数据;
 1protected void doBusiness(Session session) {
 2

 3        while (true
{
 4            //do your business with the opening session        

 5            someMethod(session);
 6
            session.flush();
 7
            session.clear();
 8            logger.info("good job!"
);            
 9        }
       
10}

每做一次数据操作,就更新一次Session,这样可以保证每次数据操作都成功,否则就让Spring去控制它roll back吧。

最后,记得关闭Session。

1 Session session  =  openSession();
2 doBusiness(session);
3 session.close();  // 关闭session


至于处理速度呢,不会慢到哪儿去的,已经试验过了。; - )

还等什么,赶快试试吧!

相关文章推荐

Hibernate大数据量操作解决方案

阅读了Hibernate的Reference之后,可以采用批量处理的方法,当插入的数据超过10000时,就flush session并且clear。 下面是一个测试method。 * 测试成批...

大数据量获取topn解决方案

/** * list类型有序的存储 * @author wWX154783 */ public class LimitStorageList { private long maxTopN...

EditText 自动搜索本地数据库(大数据量)卡顿解决方案

假设本地存了很多数据,按关键字搜索,而且要求自动搜索,没有搜索按钮,输入法上也没有,就要求这种体验,当你输入一个字符的时候,EditText的addTextChangedListener其实就开始监听...

EXCEL大数据量导出的解决方案

将web页面上显示的报表导出到excel文件里是一种很常见的需求。润乾报表的类excel模型,支持excel文件数据无失真的导入导出,使用起来非常的方便。然而,当数据量较大的情况下,excel本身的支...

Mybatis 大数据量的批量insert解决方案

关于Mybatis 大数据量批量insert解决方案

大数据量下高并发同步的解决方案

大数据量下高并发同步的讲解(不看,保证你后悔)      对于我们开发的网站,如果网站的访问量非常大的话,那么我们就需要考虑相关的并发访问问题了。而并发问题是绝大部分的程序员头疼的问题, 但...

WEB网站大数据量的性能解决方案

随着中国大型IT企业信息化速度的加快,大部分应用的数据量和访问量都急剧增加 ,大型企业网站正面临性能和高数据访问量的压力,而且对存储、安全以及信息检索等 等方面都提出了更高的要求…… 本文...

Mybatis 大数据量的批量insert解决方案

通过Mybatis做7000+数据量的批量插入的时候报错了,error log如下: current_timestamp, current_timestamp ) 被中止,呼叫 getNextExc...

多系统之间大数据量增量同步解决方案

一、背景介绍 上海立邦TU报销系统,是上海立邦集团针对内部的报销的业务,编写的一套系统,此系统主要特点是和Web、SAP和Notes等系统实现无缝对接,从而完成整体业务的流转,目前立邦已经存在SAP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)