首页 > 解决方案 > 在调用 session.save() 时非法尝试将代理与两个打开的会话相关联

问题描述

我正在尝试将批量数据保存到表中,同时保存我面临的问题是

非法尝试将代理与两个打开的会话相关联

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

        for (Object obj : ObjectList) {
            session.save(obj );
        }
        transaction.commit();
        session.close();
     }

我在更新记录时看到了这个问题,但现在正在保存是否有任何解决方案。

标签: javahibernatebulkinserthibernate-criteria

解决方案


在这里您可以刷新一批插入并释放内存:

有关更多信息,您可以参考 hibernate doc on batch processing。

    int count=0;

     for (Object obj : ObjectList) {

         session.save(obj );
         //20, same as default the JDBC batch size
         if ( ++count % 20 == 0 ) {
             session.flush();
             session.clear();
         }
    }
    transaction.commit();
    session.close();

推荐阅读