好像这个问题经常出现,解决办法也很多,我只推荐一种:
把session.update(object)换成session.merge(object)
这个方法会把object属性拷贝一份存过去,所以就不存在“a different object”这种问题了
代码如下:
public void update(Project p) { Session session = HibernateUtils.getSession(); session.merge(p); }
具体用法与原理介绍参见:
Hibernate三种状态的区分,以及save,update,saveOrUpdate,merge等的使用
这篇文章介绍了hibernate的对象的3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object),瞬时对象和脱管对象也称为VO(Value Object)。然后详细介绍了这几种方法的作用原理与相互之间的区别。