Spring Boot JPA:“ EntityType”中的id为null(发生异常后不要刷新Session)

时间:2018-08-07 09:13:50

标签: java spring spring-data-jpa

我正在使用Spring Data JPA存储库。我有一个服务(带有@Tranasctional),该服务接受一些数据并将其保存到数据库(使用JpaRepository)。如果为数据库中的字段设置的任何唯一约束失败,则数据库将触发ConstraintViolationException。现在,我想查询数据库,以找出保存数据时违反了唯一字段中的哪个。从某种意义上说,我的服务的save方法是这样的:

@Transactional
public void saveData(MyDto data) {
    MyEntity entity = new MyEntity();
    entity.setName(data.getName());
    entity.setEmail(data.getEmail()); // has unique constraint set
    entity.setPhoneNumber(data.getPhoneNumber()); //// has unique constraint set

    try {
        // repository is injected and extends JpaRepository
        repository.save(entity);

    } catch(Exception ex) {

        //Check if email exists
        int val = repository.checkIfEmailExists(data.getEmail());
        if(val > 0) {
            throw new UserEmailExitsException();
        }

        //Check if phone number exists
        val = repository.checkIfPhoneNumberExists(data.getPhoneNumber());
        if(val > 0) {
            throw new UserPhoneNumberExistsException();
        }

        // Not the case, throw catched exception
        throw ex;
    }
}

问题在于,调用repository.checkIfEmailExists(data.getEmail())将触发另一个异常,提示null id in "MyEntity" (don't flush the Session after an exception occurs)。为什么会这样?

在性能问题上,我不想在致电save之前查询数据库。我只想查询发生ConstraintViolationException的情况。

0 个答案:

没有答案