我使用hibernate来保存,更新和删除数据库中的数据,但是我遇到了一些问题。
例如,我有一个请求保存或更新数据库中的数据
getHibernateTemplate().saveOrUpdate(client);
getHibernateTemplate().flush();
当我第一次启动服务器(TomCat)并保存数据时,一切正常,在我的数据库中,我看到了我的数据。
如果我删除了数据并运行了我的客户端的新保存,即使我删除了数据,它也会执行更新而不是插入。
答案 0 :(得分:2)
那是因为对象已经在内存中了,而hibernate已经持久存在了。当应用程序启动时,如果没有另外定义,hiberante会根据需要将对象加载到内存中(延迟提取)。当对象以编程方式更改时,hibernate会将对象持久保存到数据库中。您无需使用save()
,只需使用commit()
。 save
仅用于新创建的对象,update()
用于将分离的对象重新附加到会话。
您不能在不使用hibernate的情况下更改数据库数据,并期望hibernate意识到数据库已更改。您必须使用hibernate session
方法更改数据。
如果您更改的数据不是使用hibernate而您希望hibernate对该对象进行自动加载,请使用session.refresh()
方法将对象从数据库重新加载到内存中。这样,数据库中的更改将反映在内存中加载的对象中。