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()只被調用一次。