2012-10-14 77 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);