0

1 つの休止状態セッションでの遅延反復子と複数のトランザクションに少し混乱しています。次のコード ブロックがあります。

@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-discourageed

独自のトランザクションを定義しないと、データベースに対するすべてのステートメントが独自のトランザクションで実行される暗黙的なトランザクション モードに戻り、パフォーマンス コスト (データベースがトランザクションを構築および破棄するのにかかる時間) が高くなり、一貫性が低下します。 .

したがって、反復子は独自のトランザクションの一部として実行されます。それが理にかなっていることを願っています。

于 2012-06-22T09:50:17.147 に答える