天天看点

SSH整合中Hibernate的saveOrUpdate方法失效的问题

        最近做一个ssh整合的crm项目,在使用Hibernate的saveOrUpdate方法保存或更新数据时,出现只保存数据,而不更新数据的现象。

        网上大多数人认为是web.xml配置问题,针对我自己的程序查找发现与web.xml配置无关。

        大家都知道,Hibernate中的对象有3种状态,瞬时状态(Transient)、持久化状态(Persistent)和离线状态(Detached也叫做脱管状态)。

            这三种状态的区别分别:

                   与session关联的对象处于持久态,是持久化对象;

              与Session没关联,也没有OID的对象处于瞬时状态,是瞬时对象;

              与Session没关联,但有OID的对象处于游离状态,是游离对象。

        Hibernate中的save方法操作的是瞬时对象,即对没与session关联,与数据库也没有对应关系的对象就行保存;update方法则是对游离对象进行操作,即将与数据库中有对应关系,但没有与session关联的对象进行更新。

        所以,saveOrUpdate方法在调用时会判断操作对象的状态,若是瞬时对象,则执行save方法;若是游离对象,则执行update方法,而两者的区别在与有无OID。

        故,我在调用action的jsp 页面表单中加入要操作的对象id,当表单提交时,对象id将随提交到后台,就可以实现更新操作。

继续阅读