我正在尝试将JdbcBatchItemWriter
用于域对象RemittanceClaimVO
。 RemittanceClaimVO
有List
个其他域对象ClaimVO
。
public class RemittanceClaimVO {
private long remitId;
private List<ClaimVO> claims = new ArrayList<ClaimVO>();
//setter and getters
}
因此,对于每个remit id,会有多个声明,我希望使用单个批处理语句来插入所有行。
使用普通的jdbc,我曾经通过将值放在如下的批次中来编写这个对象,
ist<ClaimVO> claims = remittanceClaimVO.getClaims();
if(claims != null && !claims.isEmpty()){
for(ClaimVO claim:claims){
int counter = 1 ;
stmt.setLong(counter++, remittanceClaimVO.getRemitId());
stmt.setLong(counter++, claim.getClaimId());
stmt.addBatch();
}
}
stmt.executeBatch();
我不确定如何使用ItemPreparedStatementSetter
在Spring Batch中实现相同功能。
我在setValues
方法中尝试了类似的循环但是没有设置值。
@Override
public void setValues(RemittanceClaimVO remittanceClaimVO, PreparedStatement ps) throws SQLException {
List<ClaimVO> claims = remittanceClaimVO.getClaims();
for(ClaimVO claim:claims){
int counter = 1 ;
ps.setLong(counter++, remittanceClaimVO.getRemitId());
ps.setLong(counter++, claim.getClaimId());
}
}
This似乎是另一个相关的问题。
请建议。