Hibernate executeUpdate性能

时间:2012-04-11 17:31:16

标签: hibernate orm jdbc

我正在比较旧方式和使用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");

...
}

以下是Hibernate版本:

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的性能?

1 个答案:

答案 0 :(得分:0)

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