java - hibernate session.save() 插入与对象不同的值

标签 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();
        }
    }

最佳答案

您应该使用saveOrUpdate 而不是save

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

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

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

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

我的建议:总是使用 saveOrUpdate//如果记录存在更新,否则更新

关于java - hibernate session.save() 插入与对象不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253171/

相关文章:

java - 如何为可变数量的按钮创建操作?

java - .war 的相对路径如何工作?

mysql - 数据库设计决策 : multiple (mysql) databases or 1 database?

mysql - 删除并加入,然后设置一列

java - 为什么要重写hibernate持久化类中的hashCode和equals方法?

java - JPA + Hibernate + CrudRepository 刷新?

到达文件末尾时java扫描仪空指针异常

java - 如何让 Android 在按下电子邮件链接后重定向到特定 Activity ?

java - SQLite 卡在 SQLite.trampoline() 方法上

java - 无法执行 OneToOne 映射 Hibernate