繁体   English   中英

如何避免Hibernate ValidationException上的自动实体更新

[英]How to avoid automatic entity update on Hibernate ValidationException

我有一个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;
}

我从未使用过spring,但如果这与EJB相同,那么只有在抛出未经检查的异常时才会回滚事务。

当从EJB方法抛出java.lang.Exception时,您显然必须使用thethrows关键字在方法的签名中声明它。 在这种情况下发生的事情如下:1)事务被提交2)异常被重新抛给客户端

取自此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM