@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.сообщение} '}