【问题标题】:Hibernate executeUpdate performance休眠执行更新性能
【发布时间】:2012-04-24 01:20:31
【问题描述】:

我正在比较旧方式和使用 Hibernate 之间的数据库“更新”性能。

这是我的数据库结构:文档 -> 代码 -> Code_Details。父表和子表之间是一对多的关系。

现在我有大约 850 个 Code_Details 条目需要在数据库中更新。

下面是旧方法,它的执行速度是原来的两倍:

public void executeDBUpdate(int status1, int status2, int status3){
...
...
java.sql.Statement statement = connection.createStatement();
statement.executeUpdate("update Code_Details set status1="+status1+", status2"+=status2+", status3="+status3");

...
}

下面是休眠版本:

public void executeDBUpdate(int status1, int status2, int status3){
...
...
Query query = session.createQuery("update Code_Details set status1=:status1,   status2=:status2,status3=:status3);          
query.setParameter("status", status_);
        query.setParameter("status1",status1);
        query.setParameter("status2",status2);
        query.setParameter("status3",status3); 
        query.executeUpdate();
        HibernateUtils.commitTransaction("emscribedx");

...
}

请注意,在这两个版本中,我的“executeDBUpdate(int,int,int)”方法被调用 850 次以执行每个数据库更新。

以旧方式执行这 850 次更新的总时间是:

954 milliseconds

使用 Hibernate 执行相同的 850 次更新的总时间是:

1979 milliseconds

我将其分解并注意到 Hibernate 版本中的大部分时间都在“query.executeUpdate()”-> 954 毫秒和“hibernateTransaction.commit()”-> 750 毫秒。

在执行大量更新时如何提高 Hibernate 性能?

【问题讨论】:

  • 那么,大部分差异是由于您的 Hibernate 版本在每次更新后提交事务,对吧?
  • 是的。我注意到在 Hibernate 版本中,大多数时间都在每次更新时执行 executeUpdate() 和 commit()。

标签: hibernate orm jdbc


【解决方案1】:

好的,我现在在同一个事务中调用“query.executeUpdate()”850 次,它确实减少了处理时间。 所以基本上“query.executeUpdate()”被调用了 850 次,但 session.commit() 只被调用了一次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 2011-07-28
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2019-03-28
    • 2016-12-06
    • 1970-01-01
    相关资源
    最近更新 更多