我正在使用(Spring Data) JpaRepository 来执行CURD操作。在这里,我看到了两个方法 save 和 saveAndFlush 。在这两种方法中我得到了相同的结果,它成功地将数据保存在数据库中。那么区别是什么呢?我没有使用任何类型的事务机制,使用 save 方法发出commit命令。
@Transactional
public BaseDto add(BulkPermitCategoryDto requestDto) {
BaseDto baseDto = new BaseDto();
try {
BulkPermitCategory category = ObjectConverter
.bulkPermitCategoryDtoToBulkPermitCategory(requestDto);
bulkPermitCategoryRepository.saveAndFlush(category);
baseDto.setStatusCode(0);
} catch (Exception e) {
log.error("exception occered ", e);
e.printStackTrace();
}
return baseDto;
}
和
@Transactional
public BaseDto add(BulkPermitCategoryDto requestDto) {
BaseDto baseDto = new BaseDto();
try {
BulkPermitCategory category = ObjectConverter
.bulkPermitCategoryDtoToBulkPermitCategory(requestDto);
bulkPermitCategoryRepository.save(category);
baseDto.setStatusCode(0);
} catch (Exception e) {
log.error("exception occered ", e);
e.printStackTrace();
}
return baseDto;
}
答案 0 :(得分:3)
保存()强>
save()
正在调用EntityManager.persist()
或EntityManager.merge()
这不会立即执行SQL语句。它们将在事务提交时执行。
<强> saveAndFlush()强>
saveAndFlush()
另外调用将执行所有保留的SQL语句的EntityManager.flush()
。
因此,如果存在任何违反约束的行为,则在调用saveAndFlush()
时会收到例外情况,但在调用save()