spring-mongo交易将一切退回

时间:2018-07-20 15:59:53

标签: spring mongodb spring-boot spring-transactions spring-mongodb

有什么解决方案可以回滚已保存文档的mongo交易吗?

我有一种方法

@Transactional
public Order createPerson(Person person, String name) {

    person.setName(name);

    personRepository.save(person);

    //generate a new personalNumber and saves it in PersonalNumber document
    PersonalNumber personalNumber = mongoOperations
        .findAndModify(Query.query(where("name").is(name)), new Update().inc("personalNumber", 1L), options().returnNew(true), PersonalNumber.class);

    if (personalNumber == null) {
        //throw exception
    }

    person.setPersonalNumber(personalNumber.getPersonalNumber());

    //save the person
    return personRepository.save(person);
}

我先在Persons集合中保存不带PersonalNumber的Person,然后我想通过findAndModify()使用'name'作为标识符生成一个personNumber。如果存在“名称”,则在PersonalNumber文档中增加PersonalNumber。如果不是,则抛出异常。之后,将personNumber分配给该人并再次保存。

我正面临事务注释的问题。 我想要的是,当findAndModify()方法失败时,事务将回滚Person的初始创建。但是,@ Transactional没有执行所需的任务。

我也用过

@Transactional(rollbackForClassName = {"Exception"})

,但不会回滚初始创建。

有什么解决办法吗?谢谢

注意:由于技术要求,我不想更改当前代码流,即保存,findAndModify,更新。

0 个答案:

没有答案