2012-06-22 100 views
0

我對一個休眠會話中的惰性迭代器和多個事務有點困惑。有以下代碼塊:延遲加載和多個事務

@Transactional 
public void runtProcessing() { 
HibernateTemplate hibernateTemplate = ... 
Session hibernateSession = hibernateTemplate.getSessionFactory().getCurrentSession(); 
Iterator<DomainObject> domainObjects = hibernateTemplate.iterate(...); 
      try { 
       while (domainObjects.hasNext()) { 
        hibernateSession.beginTransaction(); 
        DomainObject domainObject = domainObjects.next(); 

        processDomainObject(domainObject); 
        hibernateSession.getTransaction().commit(); 
       } 
} 

由於有多個事務,我不知道迭代器在什麼事務中工作?

回答

0

從這裏http://ayende.com/blog/3775/nh-prof-alerts-use-of-implicit-transactions-is-discouraged

當我們沒有定義自己的事務,我們又陷入隱性 交易模式,其中每條語句在其 自己的事務數據庫的運行,從而導致更高的性能成本(數據庫時間 構建和拆除事務)並降低一致性。

因此迭代器作爲其自身事務的一部分運行。希望這是有道理的。

+0

用'@ Transactional'註釋更新代碼。已經有一個打開的交易。 –