小编典典

在ConstraintViolationException之后,休眠会话无效

hibernate

在引发约束违规异常之后,有什么方法可以继续使用线程绑定的hibernate会话吗?我在这里举一个简短的例子:

    Parent other=service.load(33); // loads a new parent
    try {
        Parent p=new Parent();
        p.setName("A name");
        service.save(p); // a @Transactional spring service class, throws ConstraintViolationException - name should be at least 15 characters long
    } catch (ConstraintViolationException e){
        // i would like to handle validation errors and proceed normally
        // but the session is allready closed here
    }
    System.out.println("Children: " + other.getChildren()); // lazy initialization exception, even when using opensessioninview

从现在开始,hibernate会话完全没有用,即使对于只读操作,例如使用OpenSessionInView模式在视图中呈现惰性集合。


阅读 259

收藏
2020-06-20

共1个答案

小编典典

Session的文档指出,
如果Session引发异常,则必须回滚事务并丢弃会话。 发生异常后,会话的内部状态可能与数据库不一致。

AFAIK,无法从中恢复,我记得工作中有人警告我,由于这些问题,请勿使用session-per-request / OpenSessionInView-
pattern。

2020-06-20