hibernate为什么用了saveOrUpdate该怎么用
save的话是不需要给数据库传ID的可是如果想要UPDATE的话不是要传ID吗该怎么做才能用saveorupdate呢...
save的话是不需要给数据库传ID的 可是如果想要UPDATE的话 不是要传ID吗 该怎么做才能用saveorupdate呢
展开
4个回答
展开全部
楼主看下Hibernatet中的三种对象。
临时对象,也就是不在Session里边,没有持久化标识,数据库中也没有对应的这个数据的记录,此时才能用save;
持久化对象,在Session里边的,拥有持久化标识OID,此时的数据的内容只要修改,(ID)不能变,会引起数据此对象和数据库的联动,这是Hibernate通过同步来实现的。具体怎么实现,可参考对象的生命周期,和垃圾回收有一丝关系。此时的数据只要修改就算不使用saveOrUpdate也会达到更新数据库的效果。
还有一种对象:脱管对象。此对象拥有持久化标识,也就是说数据库中有这个对象对应的数据记录,但是Session关闭了,也就是说Session的缓存中没有这个对象了。不受Session的管理了。此时如果修改了这个对象的属性,不会了生联动,也就是数据不会反映到数据库中去,除非调用saveOrUpdate()方法,并且commit后,此对象又成了持久化对象。
呵呵,看下Hibernate的三种对象类型,相信楼主会明白。
临时对象,也就是不在Session里边,没有持久化标识,数据库中也没有对应的这个数据的记录,此时才能用save;
持久化对象,在Session里边的,拥有持久化标识OID,此时的数据的内容只要修改,(ID)不能变,会引起数据此对象和数据库的联动,这是Hibernate通过同步来实现的。具体怎么实现,可参考对象的生命周期,和垃圾回收有一丝关系。此时的数据只要修改就算不使用saveOrUpdate也会达到更新数据库的效果。
还有一种对象:脱管对象。此对象拥有持久化标识,也就是说数据库中有这个对象对应的数据记录,但是Session关闭了,也就是说Session的缓存中没有这个对象了。不受Session的管理了。此时如果修改了这个对象的属性,不会了生联动,也就是数据不会反映到数据库中去,除非调用saveOrUpdate()方法,并且commit后,此对象又成了持久化对象。
呵呵,看下Hibernate的三种对象类型,相信楼主会明白。
展开全部
save是返回插入数据的主见的,而saveOrUpdate是void
save方法更适用与确定了是要插入,而且需要得到插入数据的主键
而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键
另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,此时你就要用到saveOrUpdate
总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate
save方法更适用与确定了是要插入,而且需要得到插入数据的主键
而saveOrUpdate更倾向于不缺定是插入还是更新,而且你不需要得到他的主键
另一方面,如果你无法确定你要插入或更新的对象是不是持久态或游离态时。如果你save一个持久态或更新一个游离态,这都是有问题的,此时你就要用到saveOrUpdate
总体来说,如果你能确定你即将操作对象的状态,则不需要用saveOrUpdate
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
session的saveOrUpdate是根据对象的状态(瞬时,持久,托管)对对象进行save或update操作的,我猜楼主肯定是刚刚学习到这一块,因为实际项目中,这个方法用的应该很少(我猜的).
当对象的状态为瞬时状态时,对对象进行save操作
当对象的状态为持久或托管状态时,对对象进行update操作
当对象的状态为瞬时状态时,对对象进行save操作
当对象的状态为持久或托管状态时,对对象进行update操作
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
saveOrUpdate方法是自动匹配,根据你的执行语句选择save或者update
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询