批量更新在本地系统上运行正常但在测试服务器上执行需要数小时。尽管数据库使用不多且包含150 000条记录。
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();
}
答案 0 :(得分:0)
请尝试以下。如果您为任何字段设置任何新值,则更新记录,否则请忽略此记录。
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();
}