【发布时间】:2012-11-18 18:03:57
【问题描述】:
我目前正在设置一个 Spring MVC / Hibernate 应用程序,它将存储一个人员数据库。
我已使用以下教程进行了设置(已删除 cmets): 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());)?随着项目的扩展,我希望能够根据需要轻松添加尽可能多的字段,而不必每次都更新此类。
在 cmets 中,有一些东西表明 session.update(page); 会起作用,但这只会引发错误(已经关联了具有相同标识符值的不同对象与会话)。
【问题讨论】:
-
使用
Person updatedAndPersistentPerson = session.merge(person)。 -
我已经尝试过了,而且 session.merge(person) 似乎工作正常,没有其他的 - 有什么理由我不应该这样做吗?
-
剩下的只是将
session.merge(person)的结果分配给一个变量。它让您意识到,与update()和persist()不同,merge()返回一些内容,即已复制分离实体状态的附加实体。如果你想对附加的实体做其他事情,请确保使用方法的结果,因为方法的参数保持不变和分离。
标签: java spring hibernate spring-mvc