Hi Joey,
You should always put a batch inside an explicit transaction,
otherwise iBATIS will execute each statement individually. (i.e. it will
ignore batch completely). That's why batchResult is empty. If you look at
your database, all the updates would have happened.
Try:
this.getSqlMapClient().startTransaction();
this.getSqlMapClient().startBatch();
for (Subscriber subscriber : subscriberList) {
this.getSqlMapClient().update("Subscriber_updateSubscriber",
subscriber);
}
List<BatchResult> batchResult =
this.getSqlMapClient().executeBatchDetailed();
this.getSqlMapClient().commitTransaction();
Now you should see desired result.
P.S.- setInBatch(false) used in executeBatchDetailed() shouldn't affect
executeBatchDetailed at all.
Thanks,
Abhigyan
Joey Lv <[email protected]>
22/04/2009 11:10
Please respond to
[email protected]
To
[email protected]
cc
Subject
Question about the executeBatch......
Hi,
Below is my java code, to execute a batch
this.getSqlMapClient().startBatch();
for (Subscriber subscriber : subscriberList) {
this.getSqlMapClient().update("Subscriber_updateSubscriber",
subscriber);
}
List<BatchResult> batchResult =
this.getSqlMapClient().executeBatchDetailed();
But I found the batchResult alway is null.
Here is the source code of
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate#startBatch
public void startBatch(SessionScope session) {
session.setInBatch(true);
}
and here is the source code of
com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate#executeBatchDetailed
public List executeBatchDetailed(SessionScope session) throws
SQLException, BatchException {
session.setInBatch(false);
return sqlExecutor.executeBatchDetailed(session);
}
So, why need ‘session.setInBatch(false);’ in the mehod
executeBatchDetailed()? And is this the cause of "batchResult always is
null"?
Thanks
Joey Lv