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()と、識別子が存在する場合は更新メソッドが呼び出され、そうでない場合は保存メソッドが呼び出されます。

メソッドを呼び出すとsave()、オブジェクトがデータベースに格納されます。つまり、エントリを挿入します。

続行する前に見てください: Hibernate のさまざまな保存方法の違いは何ですか?

私の提案:Always use saveOrUpdate //if record exists update otherwise new

于 2013-06-22T17:03:28.703 に答える
0

を使用しsession.merge()ます。そのため、Hibernate で Session.saveOrUpdate() を使用すると、NonUniqueObjectException がスローされる可能性があります。 .dpuf

于 2013-06-22T17:36:58.403 に答える