1
我想批量迭代實體列表並想要更新同一實體中的特定字段。我想使用的邏輯如下:休眠:迭代一批對象並更新它
private void process()
{
int index = 0;
boolean hasMore = true
while (hasMore)
{
List<Model> models = DAO.getModels(index, batchSize); // batchSize is configurable
if (models != null && models.size() == 0)
{
System.out.println("found zero ");
hasMore = false;
break;
}
processModels(models);
index = index + batchSize;
}
}
的獲取模型方法有一個HQL查詢類似如下:
String hqlQuery = "from Model ac where ac.syncflag ='N'"
的processModels()方法處理這些模型對象,並根據一些邏輯將syncflag值設置爲'Y'。
中processModel()方法是這樣的:
private void processModel()
{
if (models != null && models.size() > 0)
{
for (Model model : models)
{
this.updateFlagForModel(model);
}
}
}
}
private void updateFlagForModel(Model model)
{
// some processing........
model.setFlag(true);
DAO.saveOrUpdate(model);
}
然而,正如我在迭代和更新同一對象的批處理邏輯是越來越不安,我無法處理正確的記錄數。
有人可以幫忙嗎?我是否需要在查詢部分添加一些額外的邏輯來處理這個問題?
問候
'無法處理正確數量的記錄' - 我們該如何知道您的意思?請提供詳細和準確的問題描述。 – kostja 2014-09-11 13:01:30
順便說一句你有沒有使用批量更新的原因? – kostja 2014-09-11 13:02:07
迭代邏輯中斷,無法正確處理。假設我總共有9條記錄要處理。當我不執行實際更新並通過放入一些記錄器語句來驗證邏輯時,我可以看到所有9個記錄可供處理。但是,與實際更新操作相同的邏輯正在中斷,所有記錄都沒有得到處理。即使System.out語句(System.out.println(「找到零」);)沒有得到打印。 – Anand03 2014-09-11 13:09:22