Spring Data Jpa Save和SaveAndFlush

时间:2018-01-09 05:59:41

标签: spring spring-data spring-data-jpa

我正在使用(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;
}

1 个答案:

答案 0 :(得分:3)

保存()

save()正在调用EntityManager.persist()EntityManager.merge()这不会立即执行SQL语句。它们将在事务提交时执行。

<强> saveAndFlush()

saveAndFlush()另外调用将执行所有保留的SQL语句的EntityManager.flush()

因此,如果存在任何违反约束的行为,则在调用saveAndFlush()时会收到例外情况,但在调用save()

时则不会