每次事务后Hibernate提交都会变慢

时间:2012-05-29 07:27:50

标签: java hibernate

您好我有一个应用程序,其中一个if请求附带一个数组我必须从表中选择数据,如果没有找到生成新值并插入表中,然后再次循环统计数据检查下一个值等等。对于新请求,这将完成大约50000次。

我正在使用

  public void save(Object obj,Session session)  {       

        Transaction tx = null;
        try {
            tx = session.beginTransaction();
            session.save(obj);
            //session.saveOrUpdate(obj);
            //session.flush();

            session.clear();
            tx.commit();
        }
        catch (HibernateException e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);            

            if(tx!=null){
                tx.rollback();
            }
        } 
}

提交方法,并为每个生成的新值调用它。对于每个请求,它被调用50000次。 我必须为每个值提交我的事务,因为我不希望在表中生成重复值,因此如果新请求带有相同的数据而前一个正在运行,则应从表中获取该值。所以我想我将不得不提交每个事务..但如果我使用经典的JDBC而不是休眠,那么这会变得非常快吗?我做错了什么是hibernate比它慢?因为我认为大部分时间都是在开始和提交事务中一次又一次地消耗。

1 个答案:

答案 0 :(得分:3)

您正在做的是批处理

很少有想法

  • 使事务更大(跨度超过1个插入)
  • 使用乐观锁定:如果发生冲突则重试
  • 配置JDBC批处理大小

为避免重复插入,请添加一个包含自然键的额外列,并具有唯一约束。