【问题标题】:Updating multiple values simply in Spring MVC / Hibernate在 Spring MVC / Hibernate 中简单地更新多个值
【发布时间】: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


【解决方案1】:

函数的 Person 参数是如何创建的?由于该对象的 id 已经存在,我假设它是在函数调用之前从数据库中获取的。

所以只有 session.save(person) 应该在这种情况下工作。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2018-06-30
    • 2015-11-23
    相关资源
    最近更新 更多