Java 为什么在hibernate批处理中使用openSession()

Java 为什么在hibernate批处理中使用openSession(),java,hibernate,batch-processing,Java,Hibernate,Batch Processing,下面是Hibernate中有关批处理的代码示例: Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); for ( int i=0; i<100000; i++ ) { Customer customer = new Customer(.....); session.save(customer); if ( i % 20 == 0 )

下面是Hibernate中有关批处理的代码示例:

Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();

for ( int i=0; i<100000; i++ ) {
    Customer customer = new Customer(.....);
    session.save(customer);
    if ( i % 20 == 0 ) { //20, same as the JDBC batch size
        //flush a batch of inserts and release memory:
        session.flush();
        session.clear();
    }
}

tx.commit();
session.close();
Session Session=sessionFactory.openSession();
事务tx=会话.beginTransaction();

for(int i=0;iSessionFactory.openSession()总是打开一个新会话,在完成操作后必须关闭该会话。SessionFactory.getCurrentSession()返回绑定到上下文的会话-您不需要关闭该会话。

感谢您的回复。我的主要问题是,为什么在使用getCurrentSession时会生成错误()。它是由会话绑定到上下文时会话在其他地方持有的其他事务引起的吗?顺便说一句,一旦我将getCurrentSession更改为openSession,代码工作正常。