org.hibernate.AssertionFailure: null id in xxx entry (don't flush the Session after an exception ...

    @transactional
    public void task() {
        //步骤(1)插入操作
        try {
            save();
        }catch (Exception e){
            log();
        }
        //步骤(2)查询操作
        select();
    }

上述代码是我遇到的出现如题所示的抛错场景。
前提:在同个事务中,
1,步骤(1)插入操作抛错了,但由于某些需要,加了try catch,错误没有往外抛;
2,这时执行了步骤(2)的查询操作(这里的查询跟步骤(1)save的实体无关);
3,查询触发了autoFlush,先前保存失败的记录会再次保存,导致抛如题所述异常。
只要排查出步骤(1)中抛错的原因(字段长度超出了数据库设置的长度、非空字段但是空了、唯一索引冲突了......一切皆有可能)并解决,也就解决了如题所示的异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容