Hibernate session.flush()导致ORA-00001:唯一约束

时间:2015-08-26 04:45:02

标签: java hibernate

我有这种方法,使用hibernate将数千条记录插入数据库。

根据这个article,刷新和清除有助于释放一些宝贵的内存,下面的代码每100条记录执行一次。但问题是:

ORA-00001:违反了唯一约束(OWNER.FOO_TABLE_PK)

总是在调用代码session.flush()时发生,这是在第100次保存之后(FOO_TABLE的PK是一个简单的长id)。我已经尝试完全删除session.flush()和session.clear()并在session.save()之后添加了session.evict(obj)并修复了问题。我不确定这是不是一个好习惯。

你们有没有想过为什么session.flush()会导致一个唯一的约束错误?大量建议定期冲洗和清理,但我不确定我是否正确使用它们。任何输入将不胜感激。谢谢!

    @Override
    @Transactional
    public void bulkSave(List<Foo> objList) {
        Session session = sessionFactory.getCurrentSession();

        if (objList != null) {
            if (!objList.isEmpty()) {
                int counter = 0;

                for (Foo obj : objList) {
                    session.save(objList);
                    counter++;


                    if ((counter % 100) == 0) {
                        session.flush();
                        session.clear();
                    }

                }

            }
        }

    }

1 个答案:

答案 0 :(得分:0)

刷新井会导致状态刷新到数据库。如果存在主键违规,那么您为对象分配主键的方式有问题。