2015-12-01 58 views
0

我在DAO類中的一些方法:如何忽略hibernate錯誤並繼續插入數據?

public void insertAVAYAcmCDRs(List<AvayaCmCdr> cdrList) { 
     AvayaCmCdr aCdrList1 = null; 
     try { 
      em.getTransaction().begin(); 
      for (AvayaCmCdr aCdrList : cdrList) { 
       aCdrList1 = aCdrList; 
       em.persist(aCdrList); 
      } 
      em.getTransaction().commit(); 
      em.clear(); 
     } catch (Exception e) { 
      logger.log(Level.INFO, "Exception in task time={0}. Exception message = {1}.", new Object[]{aCdrList1.getDate(), e.getMessage()}); 
     } 
    } 

我嘗試了所有陣列實體保存到數據庫中。但在DB中我有uniqe索引 - 它不允許插入重複的行。它在數據庫端正常工作,但我在java中有一些錯誤。

a different object with the same identifier value was already associated with the session: 

我得到這個錯誤的2個循環。我打印這個對象並在DB中找到了dublicate。

我想忽略此錯誤並繼續插入數據或以某種方式處理錯誤。

如果該行已經在我想忽略並跳過它,繼續插入

+0

此錯誤是不言自明:休眠被告知要堅持一個對象,其ID值它已經看到在同一會話中的另一個對象。你可以修改你的業務邏輯,這樣不會發生? –

+0

當你說「但是在DB中我有uniqe索引 - 它不允許插入重複的行。它在數據庫端正常工作,但我在java中有一些錯誤。」你什麼意思?如果數據庫有一個唯一的約束,那麼它不會允許你違反它,從Java或其他。 –

+0

我創建了一個不允許我插入重複行的索引。我只想跳過它們並繼續插入其餘行 – user5620472

回答

0

你爲什麼要指定這aCdrList1 = aCdrList數據庫?有什麼具體原因嗎? 您可以保存aCdrList對象。使用下面一個

em.saveOrUpdate(aCdrList); 

em.merge(aCdrList); 
相關問題