我有这种方法,使用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();
}
}
}
}
}
答案 0 :(得分:0)
刷新井会导致状态刷新到数据库。如果存在主键违规,那么您为对象分配主键的方式有问题。