使用hibernate保存/更新对象

Jaa*_*nus 3 java generics hibernate

我的班级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);   
        }
Run Code Online (Sandbox Code Playgroud)

试图使用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]
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

边注:

当我截断我的表时,保存部分工作,但是当我填充表时,再次运行此方法,从而更新表,它失败,具有此异常

Bra*_*rad 6

如果你有一个@Id已经存在于Hibernate Session缓存中的Class的分离实例,那么你将不得不调用merge()将分离的实例合并到缓存中.然后你应该打电话saveOrUpdate().

但是你必须小心地将从调用返回的实例持久化到merge()而不是作为参数传入的实例.所以你的代码必须看起来像这样

mergedOne = session.merge(one);
session.saveOrUpdate(mergedOne);
Run Code Online (Sandbox Code Playgroud)

如果您在事务内部操作,则在会话结束并且事务提交或您明确调用之前,数据库将不会更新 flush()