2012-11-18 35 views
1

我目前正在設置一個Spring MVC/Hibernate應用程序,它將存儲一個人員數據庫。簡單地在Spring MVC /休眠中更新多個值

我已經將它設置使用下面的教程(註釋去掉): http://krams915.blogspot.co.uk/2011/01/spring-mvc-3-hibernate-annotations.html

public void edit(Person person) { 
    logger.debug("Editing existing person"); 
    Session session = sessionFactory.getCurrentSession(); 
    Person existingPerson = (Person) session.get(Person.class, person.getId()); 
    existingPerson.setFirstName(person.getFirstName()); 
    existingPerson.setLastName(existingPerson.getLastName()); 
    existingPerson.setMoney(existingPerson.getMoney()); 
    session.save(existingPerson); 
} 

有沒有辦法,我可以更新整個人的一種方式,而不必指定每個更新的字段(例如existingPerson .setFirstName(person.getFirstName());)?隨着項目的擴展,我希望能夠根據需要輕鬆添加儘可能多的字段,而無需每次更新此類。

在評論中,有些建議session.update(page);會工作,但這只是引發錯誤(具有相同標識符值的不同對象已與會話關聯)。

+1

使用'Person updatedAndPersistentPerson = session.merge(person)'。 –

+0

我試過這個,session.merge(人)似乎工作得很好,沒有休息 - 有什麼理由我不應該這樣做嗎? – Toby

+1

其餘的僅僅是將'session.merge(person)'的結果賦值給一個變量。在這裏讓你意識到,與update()和persist()不同,merge()返回一些東西,它是被分離實體的狀態被複制的附屬實體。如果您想對附加實體執行其他操作,請確保使用該方法的結果,因爲該方法的參數保持不變和分離。 –

回答

0

如何創建函數的Person參數?由於該對象已經存在id,我假設它在函數調用之前從數據庫中獲取。

所以只是一個session.save(人)應該在這種情況下工作。