hibernate session.save()插入的值不同于object

时间:2013-06-22 17:00:12

标签: java database hibernate

我没什么问题。当我尝试向数据库插入新值时,函数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();
        }
    }

2 个答案:

答案 0 :(得分:2)

您应该使用saveOrUpdate而不是save

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

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

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

在继续之前看看:What are the differences between the different saving methods in Hibernate?

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

答案 1 :(得分:0)

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