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();
                }
}

由于有多个事务,我想知道迭代器在什么事务中工作?

4

1 回答 1

0

从这里http://ayende.com/blog/3775/nh-prof-alerts-use-of-implicit-transactions-is-discouraged

当我们不定义自己的事务时,我们会退回到隐式事务模式,其中对数据库的每条语句都在自己的事务中运行,从而导致更高的性能成本(数据库构建和拆除事务的时间)并降低一致性.

因此迭代器作为其自身事务的一部分运行。希望这是有道理的。

于 2012-06-22T09:50:17.147 回答