我正在尝试使用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);
}
答案 0 :(得分:0)
其他任何人都在遇到这个问题。我设法通过在RepositoryInterface中编写自己的deleteAll方法并设置如下注释来使其工作:
@Modifying(flushAutomatically = true)
@Query("delete from MyEntity")
void deleteAllCustom()
答案 1 :(得分:-1)
在deleteall和save之间使用flush。