Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate Play Framework 1.2.4:批量插入作业后关闭或断开会话?_Hibernate_Jdbc_Playframework_Bulkinsert - Fatal编程技术网

Hibernate Play Framework 1.2.4:批量插入作业后关闭或断开会话?

Hibernate Play Framework 1.2.4:批量插入作业后关闭或断开会话?,hibernate,jdbc,playframework,bulkinsert,Hibernate,Jdbc,Playframework,Bulkinsert,我正在一个Play1.2.4项目中工作,我有4个作业间隔运行,从webservice获取批量数据并将它们保存到数据库中 我当前的批量插入方法如下所示: org.hibernate.Session session = (org.hibernate.Session)MyEntityModel.em().getDelegate(); Transaction tx = session.beginTransaction(); int i = 0; for

我正在一个Play1.2.4项目中工作,我有4个作业间隔运行,从webservice获取批量数据并将它们保存到数据库中

我当前的批量插入方法如下所示:

      org.hibernate.Session session = 
            (org.hibernate.Session)MyEntityModel.em().getDelegate(); 
  Transaction tx = session.beginTransaction();
  int i = 0;
  for(Sales obj:sales)
      {
            convertToModelAndSave(obj);
          i++;
          if(i%100==0)
          {
              tx.commit();
              session.flush();
              session.clear();
              tx=session.beginTransaction();
          }
      }
  session.disconnect();
我只是在工作完成后断开会话


我想知道这对我来说是否足够,我是否真的需要断开会话(这会导致程序中出现异常)。断开连接后,我的数据库连接池会被释放吗?

另一种方法是将您的工作分成两个作业

  • 第一项工作是主要的,它将您的数据分成100个项目的块
  • 第二种方法是获取一些项目并保存它们
然后,您的第一个作业调用第二个作业,您不必在代码中放入与hibernate相关的代码

另一个优点:如果您在保存100个项目时进行了回滚,那么您的主作业可以通过逐个保存项目重试,在这种情况下,可以避免因一个错误丢失100个项目


在这种情况下,您还可以并行启动多个子对象以加快速度

,这听起来是个不错的主意!,我将尝试并查看性能结果。这就是我完成所有这些工作的主要原因。谢谢,这实际上为我节省了很多错误处理时间。与其他方法不同,我也没有看到对性能的任何影响。我创建了一个主控程序,它将数据拆分成块并发送给工人作业。我使用worker.now()执行作业,因此它们也是并行的。