小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hibernate大數(shù)據(jù)量操作解決方案

 looline 2007-01-12
閱讀了Hibernate的Reference之后,可以采用批量處理的方法,當插入的數(shù)據(jù)超過10000時,就flush session并且clear。
下面是一個測試method。
 1/**
 2     * 測試成批插入數(shù)據(jù)的事務處理,返回是否成功
 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,隨時更新數(shù)據(jù)。

首先,利用HibernateDaoSupport類來自定義個方法打開Session;
1public Session openSession(){
2        
3        return getHibernateTemplate().getSessionFactory().openSession();
4        
5    }
然后,用打開的Session處理你的數(shù)據(jù);
 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}

每做一次數(shù)據(jù)操作,就更新一次Session,這樣可以保證每次數(shù)據(jù)操作都成功,否則就讓Spring去控制它roll back吧。

最后,記得關閉Session。

1 Session session  =  openSession();
2 doBusiness(session);
3 session.close();  // 關閉session


至于處理速度呢,不會慢到哪兒去的,已經(jīng)試驗過了。; - )

還等什么,趕快試試吧!

 
                                                                               THE END

>

>

>

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多