我有一个spring方法:在构造对象之后验证实体,该对象先前是从DB中获取的。

@Transactional(rollbackFor={ValidationException.class})
    public Object approve(Command command) throws ValidationException {
        Object obj = merger.mergeWithExistingobject(command); // where I am fetching object from DB with old values and construct the new object

        validatorService.validate( obj ); // which throws ValidationException

        return saveObject(obj);
    }

但是不幸的是,即使在抛出了ValidationException之后。这些值仍保留在DB中。我如何避免这种情况。

最佳答案

您可以在ValidationException上逐出实体:

try {
    validatorService.validate( obj );
} catch (ValidationException e) {
    entityManager.detach(obj);
    //Or with Hibernate API
    //session.evict(obj);
    throw e;
}

09-08 06:40