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