Spring数据:同一事务中的DeleteAll和Insert

时间:2018-05-16 12:00:16

标签: java spring hibernate spring-data spring-data-jpa

我正在尝试使用hibernate(Spring JPA)实现低于本机查询逻辑。但是如果其中一个记录无法持久存在,则save(Iterable)会抛出异常并回滚整个事务。有没有办法捕获记录错误并继续插入其他记录。

例如: -

原生Sql查询

set autocommit=false
delete from EMPLOYEE;
insert into EMPLOYEE(id, name, sal) values(2, ‘Roy’, ‘rt’); —-stmt1
insert into EMPLOYEE(id, name, sal) values(2, ‘Joe’, 3000);
commit;

注意:sal列在EMPLOYEE表中是数字。尽管stmt1失败,执行仍会继续。

Hibernate(CrudRepository)

@Autowired
CrudRepository employeeRepository;

@Transactional
public void saveToDB(List dataList) {
   employeeRepository.deleteAll();
   employeeRepository.save(dataList);
}

2 个答案:

答案 0 :(得分:0)

其他任何人都在遇到这个问题。我设法通过在RepositoryInterface中编写自己的deleteAll方法并设置如下注释来使其工作:

@Modifying(flushAutomatically = true)
@Query("delete from MyEntity")
void deleteAllCustom()

答案 1 :(得分:-1)

在deleteall和save之间使用flush。