前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >session.save()返回值问题

session.save()返回值问题

作者头像
ydymz
发布2018-09-10 15:11:22
7910
发布2018-09-10 15:11:22
举报
文章被收录于专栏:lgp20151222lgp20151222

正常都应该返回插入的主键

但是

如果你用sessionFactory来写就一定返回0

先科普下持久化数据库的三个状态方便下面理解

一次会话状态中,持久化对象经历以下三种状态: 1 transient:对象不与数据库中任意数据相关联。(也就是主键上面没有值) 2 persistent:对象与数据库中的数据关联,包含持久标识,Hibernate保证对象持久标识与数据库主键一致。 3 detached(脱管、游离状态)

因为

使用getCurrentSession来创建session的话

在commit后

session就自动被关闭了 也就是不用再session.close()了

但是如果使用的是sessionFactory的openSession方法创建的session的话

那么必须显示的关闭session

也就是调用session.close()方法

这样commit后

session并没有关闭

对象还是持久状态

而非脱管状态 除非调用了session.close()才是脱管状态。

//不论是脱管状态还是临时状态,save一定作插入,update则一定作更新! //使用saveOrUpdate方法的话,如果对象处于临时状态的话会进行插入,如果是脱管状态的话会更新。

//如果我把一个脱管的对象u.setId(0)的话,由于id是主键,是整型,那么被置为0后就会被认为没有主键了, //既然没有了主键那就是临时状态,而不再是脱管状态了

//就是说,如果对象里面的主键是0的话,且和session没有关系,那么就是临时状态,如果是非0值的话, //就是脱管状态!

//反过来说,临时态主键就是0,所以sessionFactory的返回值一定是0!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档