0

Bulk updation working fine on local system but takes hours to execute on testing servers.Though the DB is not much in use and contains 150 000 records.

    Session session=hibernateTemplate.getSessionFactory().openSession();
    String sqlQuery = "FROM DemoDB";
    List<DemoDB> demoList = session.createQuery(sqlQuery).list();
    for (int j = 0; j < demoList.size(); j++) { 
        DemoDB demoObj = demoList.get(j);
        if(emailFlagMap.containsKey(demoObj.getEmail()))
        {
            demoObj.setSendOutDone(emailFlagMap.get(demoObj.getEmail()));
        }

        session.update(demoObj);
        if (j % 1000 == 0 && j > 0) {
            session.flush();
            session.clear();
        }

    }
    session.flush();
    session.clear();
    session.close();
}
catch(Exception e)
{
    logger.error("Exception occurred while getting response :"+e);
    e.printStackTrace();
}
James Z
  • 12,209
  • 10
  • 24
  • 44
shadow3
  • 107
  • 1
  • 5

1 Answers1

0

Please try below.if you set any new value to any of field then update record other wise ignore this record.

        Session session=hibernateTemplate.getSessionFactory().openSession();
        String sqlQuery = "FROM DemoDB";
        List<DemoDB> demoList = session.createQuery(sqlQuery).list();
        for (int j = 0; j < demoList.size(); j++) { 
            DemoDB demoObj = demoList.get(j);
            if(emailFlagMap.containsKey(demoObj.getEmail()))
            {
                demoObj.setSendOutDone(emailFlagMap.get(demoObj.getEmail()));
                session.update(demoObj);
            }


            if (j % 1000 == 0 && j > 0) {
                session.flush();
                session.clear();
            }

        }
        session.flush();
        session.clear();
        session.close();
    }
    catch(Exception e)
    {
        logger.error("Exception occurred while getting response :"+e);
        e.printStackTrace();
    }
Sejal Rudani
  • 372
  • 4
  • 19