【发布时间】:2012-08-09 17:17:02
【问题描述】:
我的班级 Foo 有方法:
protected void saveMany(Collection<T> many) {
for(Object one : many) {
one = session.merge(one); // also tried this commented out
session.saveOrUpdate(one); // session.merge(one);
}
尝试使用 saveOrUpdate 并合并,但都给了我这个异常:
Error: Invocation of method 'saveMany' in class Foo threw exception class org.hibernate.HibernateException : org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [Bar#581301]
如何解决这个问题?
旁注:
当我截断我的表时,保存部分可以工作,但是当我填充表并再次运行此方法时,更新表时,它会失败,但出现此异常
【问题讨论】:
-
当您调用
merge()时,您是否记得在实例 返回 从 merge() 而不是您传递给 merge() 的实例上调用saveOrUpdate()范围?见my answer here -
@Brad :不,我根本没有调用 saveOrUpdate,我只是调用了合并。你的意思是这样的?
session.saveOrUpdate(session.merge(one)),上面写着:The left-hand side of an assignment must be a variable -
@Brad:我这样做了:
one = session.merge(one); session.saveOrUpdate(one); -
@invariant 好的,我想我找到了发生这种情况的地方,但是我怎样才能让对象的第一个实例脱离休眠上下文?