【问题标题】:Calling insert multiple times in hibernate?在休眠中多次调用插入?
【发布时间】:2012-05-21 10:41:14
【问题描述】:

嗨,我有一个应用程序,我首先检查 DB 表中的值,如果不存在,则生成一个新值并插入到 DB 中,这个循环大约一百万次,我怎样才能加快它的速度??

p>

在我的工人阶级中:-

session=HibernateSessionFactory.getSession();       
    for(----loop 

    i check

    i generate

    then:-

    MyTable myTable=new MyTable();
            myTable.setName("dasdas");
            myTable.setww("ss");
            myTable.setaa("daaasdas");

    hibernateRepositoy.save(dgCcno,session);

}

保存其他类的方法:-

  public void save(Object obj,Session session)  {       

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

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

                if(tx!=null){
                    tx.rollback();
                }
            } 
            catch (Exception e) {
                e.printStackTrace();

                logger.error(e.getMessage(), e);        

            }
        } 

我怎样才能加快速度,或者这是正确的方法?

补充:- 我不能使用批量更新,我必须立即插入值,因为下一个选择查询中的值可能相同......然后必须从数据库中给出值

【问题讨论】:

  • 您可以使用休眠批处理。有关详细信息,请参阅stackoverflow.com/questions/8972853/…
  • @tibtof 不,我不能,我必须立即插入值,因为下一个选择查询中的值可能是相同的......然后必须从数据库中给出值
  • 你必须马上提交吗?我认为如果你只使用一笔交易,它会快得多。
  • 是因为如果我不提交,并且选择查询中的下一个值是相同的,所以它将生成相同的值再次插入..
  • 尝试将您的事务隔离级别更改为未提交读取

标签: java hibernate


【解决方案1】:
  • 不要每行使用一个事务,而是将所有内容(或至少重要的子集)包含在单个事务中
  • 发出单个查询以同时验证多行的存在
  • 关注advices of the reference documentation

【讨论】:

  • 请检查更新的问题,我必须立即插入值
  • 在给定的事务中,您插入的所有内容都对该事务可见。所以你可以执行下一个查询,它会找到你插入的行,即使事务没有提交。唯一重要的是必须刷新会话。但是 Hibernate 足够聪明,可以在执行查询之前自动刷新它。
  • 我只是尝试一下,所以你能告诉我在调用 tx.commit() 之前我可以保存的对象是否有限制。如果我必须保存大约 100 万条记录?
  • 这可能取决于您的回滚段的大小。尝试不同的尺寸,看看什么是有效的,什么是最有效的。
  • 但是如果另一个线程进来并且具有相同的值,那么只有一个问题,所以??
猜你喜欢
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多