Hibernate StatelessSession错误

时间:2017-10-18 08:27:50

标签: java hibernate jdbc

在批处理中,我使用Hibernate的StatelessSession插入和更新方法来添加或更新数据库中的对象,而不考虑任何上下文。

但是我注意到,对于大型数据集,它通常会因此错误而失败:

  

2017-10-18 01:39:46,263 [main] ERROR o.h.e.j.b.i.BatchingBatch -   HHH000315:异常执行批处理[批量更新意外返回   更新行计数[1];实际行数:0;预期:1]   org.hibernate.StaleStateException:批量更新返回意外   更新行计数[1];实际行数:0;预期:1           在org.hibernate.jdbc.Expectations $ BasicExpectation.checkBatched(Expectations.java:81)           在org.hibernate.jdbc.Expectations $ BasicExpectation.verifyOutcome(Expectations.java:73)           在org.hibernate.engine.jdbc.batch.internal.BatchingBatch.checkRowCounts(BatchingBatch.java:133)           在org.hibernate.engine.jdbc.batch.internal.BatchingBatch.performExecution(BatchingBatch.java:110)

对象存储在Set中。当它达到100个元素时,这些元素将插入数据库中:

for (TempBuyingConditionBO tempBO:pager) {
    contextStatelessSession.insert(tempBO);
    insertedElements++;
}
commitBatch();

commitBatch定义:

public void commitBatch() {
    try {
        contextTransaction.commit();
    } catch (HibernateException e) {
        if (contextTransaction != null) {
            contextTransaction.rollback();
        }
        getLog().error(e.getMessage());
    }
    contextTransaction = contextStatelessSession.beginTransaction();
}

插入超过3000个对象后,它会随机失败。

由于插入的数据正确,它看起来不像功能问题。我检查了hibernate映射,没有看到任何可以解释这个错误。

可能需要刷新先前插入的对象或使用"有状态的"会话?

有什么想法吗?

0 个答案:

没有答案