2012-04-11 79 views
0

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

这是我的数据库结构:Document - > Code - > 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性能?

+0

因此,大部分区别是由于您的Hibernate版本在每次更新后提交事务而导致的,对吧? – axtavt 2012-04-11 17:39:17

+0

是的。我注意到在Hibernate版本中,大部分时间都需要在每次更新时执行executeUpdate()和commit()。 – Marquinio 2012-04-11 17:40:48

回答

0

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