0

i am working on a play 1.2.4 project and i have 4 jobs running in intervals, fetching bulk data (from webservice) and saves them to the database.

My current bulk insert method is like this:

      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();

i am simply disconnecting the session after job is done.

I am wondering if this is enough for me, do i really need to disconnect the session (which gives me exceptions in the program). Will my database connection pool be release after disconnect?

4

1 回答 1

1

另一种方法是将您的工作分成两份工作。

  • 第一项工作是主要工作,它将您的数据分成 100 个项目的块
  • 第二个拿一些物品并保存它们

然后你的第一个工作调用第二个工作,你不必在你的代码中放入休眠相关的代码。

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

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

于 2012-07-05T14:42:57.873 回答