0

嗨,我有一个应用程序,其中当请求带有一个数组时,我必须从表中选择数据,如果找不到,则生成新值并插入表中,然后再次循环统计检查下一个值等等. 对于一个新请求,这将完成大约 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 而不是休眠,这会变得非常快吗?与它相比,我做错了什么吗?因为我认为大部分时间都花在了开始和一次又一次地提交事务上。

4

1 回答 1

3

你正在做的是批处理

几个想法

  • 使交易更大(跨度超过 1 个插入)
  • 使用乐观锁定:如果发生冲突,请重试
  • 配置 JDBC 批量大小

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

于 2012-05-29T07:41:34.587 回答