2012-10-14 108 views
0

我有以下方法使用休眠更新數據庫中的一行。我想使用新對象更新表中的所有列。所以我得到現有對象並將其所有屬性設置爲新對象的屬性。休眠更新對象的所有列

public void updatePlace(Place newPlace) { 
    Session session = factory.openSession(); 
    Transaction tx = null; 
    try { 
     tx = session.beginTransaction(); 
     Place place = (Place)session.createQuery("FROM Place AS plc WHERE plc.Id = " + newPlace.getId()).list().get(0); 
     place.setPhone(newPlace.getPhone()); 
     place.setPKey(newPlace.getPKey()); 
     place.setName(newPlace.getName()); 
     place.setDetails(newPlace.getDetails()); 
     session.update(place); 
     tx.commit(); 
    } catch (HibernateException e) { 
     if (tx != null) { 
      tx.rollback(); 
     } 
     e.printStackTrace(); 
    } finally { 
     session.close(); 
    } 
} 

在這種方法中,我逐一更新所有列,如果我有一天添加一個新列,我必須記住要更改此方法。

place.setPhone(newPlace.getPhone()); 
place.setPKey(newPlace.getPKey()); 
place.setName(newPlace.getName()); 
place.setDetails(newPlace.getDetails()); 

有更簡單的方法來更新使用newPlace對象的列嗎?

回答

1

您最好在會話界面中使用get方法獲取對象,然後更新對象的屬性,然後使用update方法。 即

Place place = (Place)session.get(newPlace.getId()); 
place.setPhone(newPlace.getPhone()); 
.... 

session.update(place);