【问题标题】:Manual closing of Session from hibernate when using JPA and Spring使用 JPA 和 Spring 时从休眠状态手动关闭会话
【发布时间】:2013-12-19 20:21:21
【问题描述】:

如果我希望使用批量插入,我相信我必须使用 hibernate 来处理它,因为 JPA 不支持它。我的问题是关于我应该如何处理会话。例如:

@Transactional
public void persistData() {
        Session session = entityManager.unwrap(Session.class);
        for (int i = 0; i < 100; i++){
            CRR crr = new CRR();
            session.save(crr);
            if ( i % 20 == 0 ) { 
                session.flush();
                session.clear();
            }
        }
}

我是否有必要:

session.close();

在方法结束时还是可以依赖在请求结束时关闭会话?

【问题讨论】:

    标签: spring hibernate session jpa batch-processing


    【解决方案1】:

    在您试图实现的目标中没有任何特定于 Hibernate 的内容,JPA 支持相同的基本操作:

    for (int i = 0; i < 100; i++){
        CRR crr = new CRR();
        entityManager.persist(crr);
        if ( i % 20 == 0 ) { 
            entityManager.flush();
            entityManager.clear();
        }
    }
    

    由于此代码中没有任何异常,因此您也无需为手动会话处理做任何事情。

    也许您将此模式与使用 StatelessSession 进行批处理操作的不同方法混淆了,这是特定于 Hibernate 并且需要手动会话管理。

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 2011-05-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      相关资源
      最近更新 更多