Транзакция не откатывается должным образом - PullRequest
0 голосов
/ 02 июня 2019

@Transactional неправильно откатывается при использовании двух разных repositories.save().Один из repository1.save() сохраняет данные через тот же транзакционный метод, который имеет repository2.save(), что не удается из-за исключения из ограничения.Тем не менее, первая запись репозитория сохраняется в БД.

Я попытался добавить @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 = 'не должно быть нулевым', propertyPath = user, rootBeanClass = class com.flash.socio.domain.UserProfile, messageTemplate = '{javax.validation.constraints.NotNull.сообщение} '}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...