spring-data删除不存在的实体产生" Transaction标记为rollback"

时间:2017-03-13 10:42:28

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

一个似乎多次被问过的问题 - 但可能不那么简单,目前的答案似乎都不适合我。

我有一个非常简单的基于Web的Spring-boot应用程序和一个REST控制器:

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.OK)
public void delete(@PathVariable("id") String id) {
    boolean success = customerService.delete(id);
    if (!success) {
        throw new ResourceNotFoundException();
    }
}

我有一个带有删除方法的服务,该方法标记为Transactional:

@Override
@Transactional
public boolean delete(String id) {
    try {
        customerRepository.delete(id);
    } catch (EmptyResultDataAccessException e) {
        return false;
    }
    return true;
}

我正在捕获异常,因为如果删除是针对不存在的实体,我不希望我的服务实现在删除上抛出异常。从JpaRepository派生的customerRepository id是为我自动生成的。

如果我尝试删除现有实体 - 一切都很好。如果我尝试删除一个不存在的实体,则抛出并捕获EmptyResultDataAccessException,返回值false,然后当方法结束并提交事务时,我得到javax.persistence.RollbackException: Transaction marked as rollbackOnly

我理解(或者认为我做过)发生的事情我只是不确定如何停止它。我已经尝试将noRollbackFor的各种组合添加到我的Transaction注释中,但无济于事。

0 个答案:

没有答案