代码之家  ›  专栏  ›  技术社区  ›  Mercer

休眠模板有问题

  •  1
  • Mercer  · 技术社区  · 14 年前

    我使用Hibernate保存、更新和删除数据库中的数据,但我有一些问题。

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

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

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   pakore    14 年前

    这是因为对象已经在内存中,并且休眠已经将它们持久化。当应用程序启动时,如果没有另外定义,hiberant会根据需要将对象加载到内存中(惰性提取)。当对象更改时 程序化的 ,Hibernate将对象保持在数据库中。你不需要使用 save() ,只是 commit() . save 只适用于新创建的对象,并且 update() 用于将分离的对象重新附加到会话。

    如果不使用hibernate,就不能更改数据库数据,并希望hibernate认识到数据库已更改。必须使用休眠更改数据 session 方法。

    如果更改不使用Hibernate的数据,并且希望Hibernate重新加载对象,请使用 session.refresh() 方法将对象从数据库重新加载到内存中。这样,数据库中的更改将反映在内存中加载的对象中。

    更多信息 Chapter 10 of Hibernate documentation