首页 > 其他分享 >十三、NHibernate之对象状态

十三、NHibernate之对象状态

时间:2022-12-08 10:39:50浏览次数:43  
标签:持久 十三 数据库 对象 NHibernate 标识符 ISession


 

引入

在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象。这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根据对象和当前会话的关联状态,我们可以把对象分为三种:

1.       瞬时对象:对象刚刚建立。该对象在数据库中没有记录,也不在ISession缓存中。如果该对象是自动生成主键,则该对象的对象标识符为空。

2.       持久化对象:对象已经通过NHibernate进行了持久化,数据库中已经存在对应的记录。如果该对象是自动生成主键,则该对象的对象标识符已被赋值。

3.       托管对象:该对象是经过NHibernate保存过或者从数据库中取出的,但是与之关联的ISession已经关闭。虽然它有对象标识符且数据库中存在对应记录,但是已经不再被NHibernate管理。

对象状态

NHibernate提供了对象状态管理的功能,支持三种对象状态:瞬时态(Transient)、持久态(Persistent)、托管态(Detached)。

1.瞬时态(Transient)

对象刚刚创建,还没有来及和ISession关联的状态。这时瞬时对象不会被持久化到数据库中,也不会被赋上标识符。如果不使用则被GC销毁。ISession接口可以将其转换为持久状态。

这像这样,刚刚创建了一个Customer对象,是一个瞬时态对象:


var customer = new Customer() { Firstname = "YJing", Lastname = "Lee"  };


2.持久态(Persistent)

刚被保存的或刚从数据库中加载的。对象仅在相关联的ISession生命周期内有效,在数据库中有相应记录并有标识符。对象实例由NHibernate框架管理,如果有任何改动,在当然操作提交时,与数据库同步,即将对象保存更新到数据库中。

3.托管态(Detached)

持久对象关联的ISession关闭后,这个对象在ISession中脱离了关系,就是托管态了,托管对象仍然有持久对象的所有属性,对托管对象的引用仍然有效的,我们可以继续修改它。如果把这个对象重新关联到ISession上,则再次转变为持久态,在托管时期的修改会被持久化到数据库中。

对象状态转换

在同步数据库的情况下执行下面的语句可以转换对象的状态。

 

 

标签:持久,十三,数据库,对象,NHibernate,标识符,ISession
From: https://blog.51cto.com/u_15906220/5920636

相关文章

  • 十二、NHibernate之SchemaExport工具
    说明​使用领域驱动开发,我觉得还不太实际,或者说对于我来说条件还不成熟,因为我对NHibernate还不太熟悉,就现时来说,使用数据库驱动开发还是最好的选择,所以,我这里暂时先不管Sche......
  • C++《面向对象课程设计》题目
    C++《面向对象课程设计》题目面向对象编程课程设计参考内容课程名称:《面向对象课程设计》设计题目:学生选课系统;订票系统;运动会分数统计系统;通信录管理系统;歌咏比赛......
  • Date对象 Math对象
    Date:日期对象1.创建:vardate=newDate();2.方法:toLocaleString():返回当前date对象对应的时间本地字符串格式getTime():获取毫秒值。返回当前如期对象描述的时间到1970......
  • java对象/谈谈Java虚拟机
    ......
  • Java学习十三
    1.异常处理能够使一个方法给它的调用者抛出一个异常。2.Java异常是派生自java.lang.Throwable的类的实例。Java提供大量预定义的异常类,例如,Error、Exception、RuntimeExc......
  • java高频面试题(反射、对象拷贝)
    java高频面试题(反射、对象拷贝)java高频面试题(反射、对象拷贝)1.什么是反射?反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力Java反射:在Java运行时环境......
  • AmazonS3对象存储实现增删查
    1importcom.amazonaws.AmazonServiceException;2importcom.amazonaws.SdkClientException;3importcom.amazonaws.auth.AWSStaticCredentialsProvider;4......
  • 【JAVA笔记】JAVA-入门基础-面向对象04
    一、OOP详解面向对象编程(Object-OrientedProgramming,OOP)面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。抽象三大特性:封装、继承、多态、1、cla......
  • 迭代器对象
    目录迭代器一.可迭代对象二.迭代器对象三.for循环的本质迭代器一.可迭代对象1.可迭代对象 对象内置有__iter__方法的都称为可迭代对象 """ 1.内置方法通过点的方......
  • 前端学习之------检测数组中的id,在对象数组中是否存在?
    1、数组为:2、对象数组为:3、检测arr中的id,在objArr中是否存在? ......