Hibernate模板的问题

时间:2010-08-26 10:19:10

标签: java eclipse hibernate oracle10g

我使用hibernate来保存,更新和删除数据库中的数据,但是我遇到了一些问题。

例如,我有一个请求保存或更新数据库中的数据

getHibernateTemplate().saveOrUpdate(client);
getHibernateTemplate().flush();

当我第一次启动服务器(TomCat)并保存数据时,一切正常,在我的数据库中,我看到了我的数据。

如果我删除了数据并运行了我的客户端的新保存,即使我删除了数据,它也会执行更新而不是插入。

1 个答案:

答案 0 :(得分:2)

那是因为对象已经在内存中了,而hibernate已经持久存在了。当应用程序启动时,如果没有另外定义,hiberante会根据需要将对象加载到内存中(延迟提取)。当对象以编程方式更改时,hibernate会将对象持久保存到数据库中。您无需使用save(),只需使用commit()save仅用于新创建的对象,update()用于将分离的对象重新附加到会话。

您不能在不使用hibernate的情况下更改数据库数据,并期望hibernate意识到数据库已更改。您必须使用hibernate session方法更改数据。

如果您更改的数据不是使用hibernate而您希望hibernate对该对象进行自动加载,请使用session.refresh()方法将对象从数据库重新加载到内存中。这样,数据库中的更改将反映在内存中加载的对象中。

Chapter 10 of Hibernate documentation

中的更多信息