2015-10-28 200 views
0

我有不同類型的對象要更新。所有對象都設置爲一個列表並將它們傳遞給一個方法。休眠更新多個對象列表

List list = new ArrayList(); 
     list.add(mediaInfo); // Class MediaInfo 
     list.add(mediaMode); // Class MediaMode 
     list.add(paidCustomer); // Class paidCustomer 
updateList (l); 

以上所有對象都已加載,而且我更改了一個字段(稱爲「位置」:字符串值)。在任何對象上方也不會附加到任何hb會話。這些對象被加載到另一個地方。我只想用更新的數據更新它們。

public boolean updateList(java.util.List <Object> dataList){ 

      Session session = null; 
     Hbutility myHbutil = null; 
     try { 
      myHbutil = new Hbutility(); 
      session = myHbutil.getSession(); 
      Transaction tx = session.beginTransaction(); 
      for(Object entity: dataList){ 
      logger.info("Updating Objects : " + entity); 

      session.update(entity); 
      } 
      tx.commit(); 

     } catch (Exception e) { 
      e.printStackTrace();    

     }finally{ 
      session.close(); 
     } 

     return updateStaus; 
    } 

所有對象都有自己的ID。但他們沒有更新。任何人在這裏看到任何問題?
谷歌有很多hibernate更新樣本。但是他們都展示了,在會話中加載一個對象,設置新的值並且簡單地更新。在我的場景中,對象從會話中加載出來,它們都是不同類型的對象。請任何幫助。

回答

2

要更新內容,還可以使用合併方法。 Maibe它可以幫助你嗎?

嘗試與實體經理對話。然後修改屬性。並保存更改例: MediaInfo tmp = em.find(MediaInfo.class, mediaInfo.getId(); //Modify some properties tmp.setMachin(....); list.add(tmp); updateList (list);

+0

感謝。我想更新列,但不想保存。 –

+0

更新合併是兩種方法來堅持現有的內容。 Maibe你可以試試session.merge(entity); – Klemm

+0

當我嘗試合併時,有一個exceptin,org.hibernate.TransientObjectException:對象引用一個未保存的瞬態實例 - 保存沖洗前的瞬態實例:com.media.entity.MediaInfo。 –

0

需要確保你的「位置」映射是按照您的期望,即它should'nt是短暫的和可更新should'nt是假

+0

感謝Jayr for ur答案不是短暫的,也沒有任何params設置可更新的錯誤。 –