Spring Transactional не откатывается на исключение - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть следующие два метода для хранения одного пользователя и нескольких пользователей в mongodb с использованием данных Spring JPA MongoRepository.Если какое-либо исключение произошло в методе, это не откат.Я могу найти данные в базе данных.

@Override
@Transactional(propagation = Propagation.REQUIRED)
public UserRequest save(UserRequest userRequest) throws UserException {
    logger.info("Saving the user information {} ", userRequest);
    User user = new User(sequenceService.getNextSequenceFor(SequenceNames.USER));
    if("admin".equals(userRequest.getFirstName())) {
        throw new UserException("Resvered name canot be used : " + userRequest.getFirstName());
    }
    BeanUtils.copyProperties(userRequest, user,"id");
    user = userRepository.save(user);
    userRequest.setId(user.getId());
    return userRequest;
}


@Override
@Transactional
public List<UserRequest> save(List<UserRequest> users) throws UserException {
    for (UserRequest userRequest : users) {
        save(userRequest);
    }
    return users;
}


@Repository
public interface UserRepository extends MongoRepository<User, String> {

}

Запрос пользователя:

[
    {
        "firstName": "John",
        "lastName": "A",
        "mobileNo": "9898989892",
        "emailId": "john.a@gmail.com"
    },
    {
        "firstName": "admin",
        "lastName": "A",
        "mobileNo": "9898989892",
        "emailId": "admin.a@gmail.com"
    }
]

Этот код сохраняет данные Джона в базе данных.Это откат только для пользователя admin.Это не откат для всех пользовательских данных.Частичного отката не происходит.

1 Ответ

0 голосов
/ 12 февраля 2019

До выпуска 4 MongoDB поддерживал атомарность только на уровне одного документа .Spring Data Mongo не предоставляет никаких дополнительных функций для преодоления этого недостатка.Однако, начиная с MongoDB 4 и Spring Data Mongo 2.1, этого можно достичь, настроив MongoTransactionManager, см. Документация Spring Data Mongo .Однако я не уверен, применима ли какая-либо из опций Propagation (исходя из спецификации JPA) к функциональности транзакций MongoDB.

...