본문 바로가기
spring/spring batch

[Spring Batch] org.springframework.dao.EmptyResultDataAccessException: Item 0 of 500 did not update any rows

by moonsiri 2021. 11. 18.
728x90
반응형

Spring Batch 실행 시 아래와 같은 오류가 발생했습니다.

org.springframework.dao.EmptyResultDataAccessException: Item 0 of 500 did not update any rows: [...]
    at org.mybatis.spring.batch.MyBatisBatchItemWriter.write(MyBatisBatchItemWriter.java:161)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.writeItems(SimpleChunkProcessor.java:193)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.doWrite(SimpleChunkProcessor.java:159)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.write(SimpleChunkProcessor.java:294)
    at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:217)
    at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:77)
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:407)
    at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:331)
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)

 

원인은 ItemWriterassertUpdates 때문이었습니다.

assertUpdates 속성은 아이템이 데이터베이스에서 업데이트하거나 삭제하지 않을 경우 예외를 발생시킬지 여부를 결정하는 옵션인데, 기본값이 true입니다. (기본 값이 true일 때 발생하는 예외가 EmptyResultDataAccessException)

 

해당 작업은 아이템이 업데이트나 삭제를 하지 않아도 되는 작업이기 때문에, assertUpdates의 값을 false로 설정하여 예외를 피할 수 있습니다.

 

	public MyBatisBatchItemWriter<...> deleteData() {
		return new MyBatisBatchItemWriterBuilder<...>()
			.sqlSessionFactory(getSqlSessionFactory())
			.assertUpdates(false)	//
			.statementId(statementId)
			.build();
	}

 

 

 

728x90
반응형

댓글