getHibernateTemplate().update和getHibernateTemplate().merge有什么区别

Nak*_*l91 2 java spring hibernate

我正在开发web项目,我希望将用户更新到数据库中.在编写代码时,我发现如果使用它会产生错误

getHibernateTemplate().update(user)"非法尝试将集合与两个打开的会话相关联";

但如果我尝试使用getHibernateTemplate().merge(user);它完美地工作得很好.这两者有什么区别?什么是开放会话的确切含义?

Adi*_*tya 7

合并可以跨会话工作,而更新仅适用于同一会话.

尽管两者都用于转换处于分离状态的对象以将对象转换为其持久状态,但只有当我们处于同一会话时更新才会起作用,但即使其不同的会话,合并也会起作用.

有关更多信息.

通过开放会话,这意味着您当前正在同一会话中执行操作(即在关闭会话之前)