1

我有小问题。当我尝试向数据库插入新值时,函数 save() 会向我插入与对象不同的值:(。我该怎么办?

这是我的功能

public void updateListOfElements(List<Dokumenty> list) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction transaction = null;
        try {
            transaction = session.beginTransaction();
            for (Dokumenty dokument : list) {
                Dokumenty dokumentToUpdate =
                        (Dokumenty) session.get(Dokumenty.class, dokument.getId());

                dokumentToUpdate.setAktywny('N');
                session.update(dokumentToUpdate);    

                // id z dupy wpisuje
                dokument.setId(10114);
                session.save(dokument);
            }

            transaction.commit();
        } catch (HibernateException e) {
            if (transaction != null) {
                transaction.rollback();
            }
        } finally {
            session.close();
        }
    }
4

2 回答 2

2

saveOrUpdate你不应该使用save

 dokument.setId(10114);
 session.saveOrUpdate(dokument);

当您调用saveOrUpdate()时,如果标识符存在,它将调用 update 方法,否则将调用 save 方法。

如果调用save()方法将对象存储到数据库中。这意味着它插入一个条目。

在继续之前看一下:Hibernate 中不同的保存方法有什么区别?

我的建议:Always use saveOrUpdate //if record exists update otherwise new

于 2013-06-22T17:03:28.703 回答
0

使用session.merge(). 因为,在 Hibernate 中使用 Session.saveOrUpdate() 时可能会抛出 NonUniqueObjectException - 更多信息请参见:http: //www.stevideter.com/2008/12/07/saveorupdate-versus-merge-in-hibernate/#sthash.WJEbdSaG .dpuf

于 2013-06-22T17:36:58.403 回答