• 我对hibernate中oid和持久化类的三种状态的理解


    oid是持久化类中的一个属性,与数据库中的id属性对应,如cust_id。

    因为hibernate底层是通过持久化类的反射方法操作的,所以持久化类中的每一个属性都应该有set和get方法,oid也不例外。但是我们不应该直接使用oid的set和get方法,而应该由数据库生成后返回给持久化类对象。

    持久化类对象是否有oid,是该对象是瞬时态还是持久态的标志。

    当我们new一个custmer类对象时,该对象存在于内存中,是瞬时状态,没有oid属性(就算我们set oid属性,由于该oid不一定能与数据库的id相对应,所以也只能算是瞬时状态),当执行session.save(customer)时,hibernate执行sql语句,并获得id,且将获得的id赋值给内存中的custmer的oid属性,此时的custmer对象就由瞬时态转变成了持久态。所以如果有瞬时态变成持久态,就必然执行了sql语句,我们可以理解为该数据已经在数据库中持久保存了,所以称之为“持久态”。但是这个持久态有点不名副其实!因为只有在transaction.commit()之后,数据库中才能查到数据。这里可以将session.save()的作用理解为获得id而模拟执行sql的。

    当session.close()关闭后,数据库的数据和内存中的对象断开连接,数据库中的数据是游离的,所以称为游离态。

  • 相关阅读:
    Cognos无法解密来着内容库的用户名和密码凭证
    JavaScript 中的对象引用
    npm install出现的错误
    箭头函数中this的用法
    [译]ArcGIS Server Map Service Cache的组织结构
    [C#] 如何选择抽象基类与接口
    数据库设计规范
    在DataTable中查询应该注意的问题
    坦克大战总结
    仓库管理系统总结(1)
  • 原文地址:https://www.cnblogs.com/lixin4395/p/10239651.html
Copyright © 2020-2023  润新知