zoukankan      html  css  js  c++  java
  • session.save()返回值问题

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

    但是

    如果你用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!

  • 相关阅读:
    第37月第23天 cmmi3
    7. HTML Web Server的选择
    6. HTML URL字符编码
    5. HTML URL(Uniform Resource Locator 统一资源定位符)
    4. HTML 字符实体
    3. HTML 脚本
    2. HTML 头部 <head>
    1. HTML 文档类型 <!DOCTYPE>
    22. HTML 颜色名
    21. HTML 颜色
  • 原文地址:https://www.cnblogs.com/ydymz/p/7129183.html
Copyright © 2011-2022 走看看