事务无法正确回滚

时间:2019-06-02 12:01:32

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

@Transactional在使用两个不同的repositories.save()时无法正确回滚。 repository1.save()之一通过相同的事务方法持久化数据,其中repository2.save()由于约束异常而失败。仍然第一个存储库记录仍保留在db中。

我尝试将@EnableTransaction管理添加到@SpringBootApplication,还尝试回滚@Transactional的属性,但是没有运气。

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;

    @Autowired
    private UserProfileRepository userProfileRepository;

    @Override
    public User findUserByUsername(String username) {
        return userRepository.findByUsername(username);
    }

    @Override
    @Transactional()
    public User save(UserTO userTO) {
        User user = User.builder().username(userTO.getUsername()).
        password(userTO.getPassword()).build();
        user = userRepository.save(user);
        UserProfile userProfile = UserProfile.builder().firstName(userTO.getFirstName()).
        lastName(userTO.getLastName()).
        dateOfBirth(AppUtil.parseDateString(userTO.getDateOfBirth())).
        gender(Gender.valueOf(userTO.getGender())).build();

        userProfileRepository.save(userProfile);
        return user;
    }

}

不应将用户保存为userprofilerepositoy.save()引发验证失败异常。

异常跟踪如下:

  

例外是   org.springframework.transaction.TransactionSystemException:无法   进行JPA交易;嵌套异常为   javax.persistence.RollbackException:提交错误   交易]与根本原因        javax.validation.ConstraintViolationException:在持续时间内,对类[com.flash.socio.domain.UserProfile]的验证失败   对于组[javax.validation.groups.Default,]约束列表   违反:[           ConstraintViolationImpl {interpolatedMessage ='一定不能为null',propertyPath = user,rootBeanClass = class   com.flash.socio.domain.UserProfile,   messageTemplate ='{javax.validation.constraints.NotNull.message}'}

0 个答案:

没有答案