2011-10-04 40 views
2

在一個大表中,在一個具有休眠的Java EE應用程序中, 我想清除幾百萬個對象。用於刪除多個對象的Hibernate優化

例如

  1. ,我感到我要清除一些對象:2000個對象返回5000 OBJETS在標籤
  2. ,然後我想在對象實際刪除它們

存在我做的:

 List<Object> objectList = this.getObjectManager() 
       .getObjectsByCriteria(clientName, objectType, MAX_OBJECTS); 
     for (final Object object : objectList) { 
      if (logger.isDebugEnabled()) { 
       logger.debug("will delete " + object); 
      } 
      this.getMManager().removeEntry(object); 
      counter++; 
     } 


public void removeObject(final Object object) { 
    final Session session = this.getHibernateUtil().getSession(); 
    session.delete(entry); 
    session.flush(); 
} 

我想冬眠刪除所有對象在t他承諾交易,而不是一個接一個。

  1. 什麼是最好的解決方案,以刪除2000對象,例如,沒有內存或休眠異常?

  2. 如何用hibernate逐個刪除?

回答

2

不要抓取它們,只是使用一些標準刪除。使用HQL對於這種情況

session.createQuery("delete from MyClass where ...").setXXX(...).executeUpdate(); 
+0

因此,如果HQL查詢返回2000個對象, 不會有休眠或內存問題? – superscral

+0

當您使用HQL刪除它們時,它們不會被加載,它們只會被刪除。 –

+0

如果我的HQL刪除必須刪除276 000個對象,它會起作用嗎? :D – superscral