2012-06-22 3 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

, 우리는 다시 암시 트랜잭션 모드에 해당하는 높은 결과의 자신의 트랜잭션 데이터베이스 실행에 대한 모든 문, 성능 비용 (데이터베이스 시간 )은 트랜잭션을 빌드하고 해체하고 일관성을 감소시킵니다.

따라서 iterator는 자체 트랜잭션의 일부로 실행됩니다. 희망은 그 말이 맞습니다.

+0

'@ Transactional'주석으로 코드가 업데이트되었습니다. 이미 열린 거래가 있습니다. –

관련 문제