首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NHibernate:为什么非持久属性必须标记为虚拟才能延迟加载

非持久属性必须标记为虚拟才能延迟加载,是因为NHibernate需要对这些属性进行代理对象的拦截和懒加载处理。

NHibernate是一个开源的对象关系映射(ORM)框架,它可以将数据库表映射到.NET对象,并提供了各种对象关系映射的功能,包括持久化、查询、更新、删除等操作。

在NHibernate中,持久化属性是指直接映射到数据库表中的属性,而非持久属性则是指不直接映射到数据库表中的属性,通常是通过计算或者其他方式动态生成的属性。

对于持久化属性,NHibernate可以直接将其映射到数据库表中,并进行增删改查等操作。但是对于非持久属性,由于它们不直接映射到数据库表中,因此NHibernate无法直接对其进行操作。

为了实现非持久属性的懒加载,NHibernate需要对这些属性进行代理对象的拦截和懒加载处理。这就需要将非持久属性标记为虚拟属性,以便NHibernate可以对其进行代理对象的拦截和懒加载处理。

因此,非持久属性必须标记为虚拟才能延迟加载,以便NHibernate可以对其进行代理对象的拦截和懒加载处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

NHibernate介绍「建议收藏」

创建数据模型 NHibernate允许直接使用Plain Old CLR Objects (POCOs),而不用通过存储过程来直接和数据库交互。使用POCOs的一个优势在于不用绑定特定的持久化层。...相比较而言,有些ORM解决方案需要特殊属性,或者是基于模型对象,这些对象又是从特定的基类中继承而来的。 在NHibernate中不用特殊的修饰就可以让对象和持久化层交互。...要注意的是所有需要持久化的属性必须虚拟的,并且要开启延迟加载,所有数据模型类中的公共方法必须虚拟的,哪怕它们并没有包含到映射文件中。 通常来讲,最好把所有的属性都设置为虚拟的。...name表示上面的程序集和命名空间中的类名,table属性告诉NHibernate数据库中的哪个表或者视图将被映射。 id元素告诉NHibernate哪个数据库的字段和对应的对象作为一个唯一键来使用。...图2 映射文件必须是嵌入的资源 7.

61420

C# 数据操作系列 - 12 NHibernate的增删改查

(7) /> schema: 数据库schema的名称 default-cascade:可选项,默认是none,一种默认的级联风格 auto-import:明确是否可以在查询中使用限定类名...,默认情况从Property 中读取 default-lazy:可选的,默认是true,是否启动延迟加载 1.2 class的配置 一般情况下,class节点只需要指定name和table就可以了。...1.2.1 id 任何一个映射都必须声明一个数据表的主键,大多数类也必须有一个唯一标示字段用来区分不同的实例。..." type="typename" /> name :类里的属性名 column:对应数据表的列名 type:数据库中的类型 1.2.3 many-to-one 在Nhibernate...2.3 删除 NHibernate的删除也十分简单,直接通知ISession删除某个持久化对象。

1.1K20

2023百度面试真题

一个类型从被加载虚拟机内存开始,到卸载出内存为止,它的整个生命周期将会经历加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化...Java 虚拟机设计团队把类加载阶段中“通过一个类的全限定名来获取描述该类的二进制流”这个动作放到 Java 虚拟机外部去实现。比便让程序应用自己决定如何取获取所需的类。...对于任意一个类,都必须加载它的类加载器和这个类本身一起共同确立其在 Java 虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。 8、UDP 协议和 TCP 协议的区别?...@Transactional Transactional 注解应用在 public 修饰的方法上@Transactional 注解属性 propagation 设置错误 @Transactional...Redis 集群模式 master 节点持久化 如果采用了主从架构,那么建议必须开启 master node 的持久化!

15220

深入探究JVM之垃圾回收算法实现细节

实际上虚拟机在类加载完成后就会将对象引用维护到一组成为OopMap的数据结构中,在GC进行初始标记这个环节时直接从该数据结构中获取根节点即可。...安全点 在上一篇简单提到过安全点的概念,虚拟机开始GC时,不能随时随地立马暂停用户线程,必须跑到合适的位置才能暂停,这个位置就是安全点。那么用户线程应该在何时何点暂停呢?...在并发垃圾回收器中都是采用让整个回收过程STW实现的,而现在为了降低这个延迟,需要将其中一些过程改为与用户线程并发执行,为此JVM使用了一个三色标记的算法来实现一致性快照。...灰色:当前对象已被访问过,但其内至少还有一个引用没被垃圾回收器扫描过的对象就回标记为灰色。黑色和白色不能直接相连,中间必须要有灰色对象。...漏,即本来应该存活的对象没有标记为黑色,导致应存活对象最后被回收,这种情况是非常危险的。

71040

#1在构造函数内调用虚方法 | TW洞见

已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。...其实这个警告就是提醒我们不要在封闭类型的构造函数内调用虚方法或虚属性。但为什么这样做不合适呢?在解惑之前,我们先来了解两个概念。...貌似应该是: Base.M Base.V Derived.M Derived.V 但运行一下会发现,真正的结果是这样的: Base.M Derived.V Derived.M Derived.V 这是为什么呢...比如如果项目中使用了NHibernate,框架本身要求ORM实体类中,所有与数据库列具有对应关系的属性必须为虚属性。...这是因为NHibernate为了实现延迟加载,会为每个实体类生成proxy,这些proxy需要重写实体类中属性的getter/setter。

1.1K110

第四十九期:闲聊前端性能优化

浏览器加载页面的过程 这里聊一个非常常见的问题,浏览器加载页面的过程。相信很多人都遇到过这个问题,但是应该很少有人去思考为什么要问这样一个问题? 很简单,理解这个原理对于我们做性能优化非常有帮助。...这也是为什么性能优化会将14kb作为初始响应优化的重点。 构建Dom树。DOM节点的数量越多,构建DOM树所需的时间就越长。当解析器发现阻塞资源时,比如一张图片,浏览器就会请求这些资源并且继续解析。...更具体的规则更昂贵因为它必须遍历更多的 DOM 树节点,但这所带来的额外的消耗通常很小。 常用的两种策略 这里主要介绍这几个手段:一,dns预解析。二,延迟加载。...当浏览器从(第三方)服务器请求资源时,必须先将该跨域域名解析为 IP地址,然后浏览器才能发出请求。此过程称为 DNS解析。DNS 缓存可以帮助减少此延迟,而 DNS解析可以导致请求增加明显的延迟。...(懒加载) 是一种将资源标识为阻塞(关键)资源并仅在需要时加载它们的策略。

94420

肝了一周,彻底弄懂了 CMS收集器原理,这个轮子造的真值!

GC Roots 是 GC Root的集合,本质上是一组必须活跃的对象引用,主要包含以下几种类型: 虚拟机栈中的引用对象:每个线程的虚拟机栈中的局部变量表中的引用。...方法区中的类静态属性引用对象:所有加载的类的静态字段。静态属性是类级别的,因此它们在整个Java虚拟机中是全局可访问的。 方法区中的常量引用对象:方法区中的常量池(例如字符串常量池)中的引用。...Java虚拟机内部的引用:比如基本数据类型对应的Class对象,一些常见的异常对象(如NullPointerException、OutOfMemoryError)的实例,系统类加载器。...虚拟机栈在方法执行完毕后会自动清理,因此也不是垃圾回收的重点。 本地方法栈(Native Method Stack):用于支持本地方法的执行(即通过JNI调用的Java代码),它是线程私有的。...(该过程在很多文章中会单独成一个大步骤讲解) 修正标记结果:由于在并发标记阶段导致的并发修改,导致漏,错,因此需要暂停应用线程(STW),确保修正这些标记结果。

10910

JVM:内存管理

在自动内存管理机制下,不再需要手动回收每个对象,不容易出现内存泄漏和内存溢出问题,但正因为将控制内存的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,需要深入了解Java虚拟机的底层原理才能更快的排查问题...如果没有就需要先执行类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存,对象所需内存在类加载完成后便可确定。...1.2 对象初始化--虚拟虚拟机将分配到的内存空间初始化为零值,并设置对象头,例如这个对象是哪个类的实例、如何才能找到类的元数据、对象的哈希码、对象GC分代年龄等信息。...从Java堆栈收集GC Roots标记为灰色进入灰色队列;多线程消费灰色队列,将每个灰色对象直接引用的对象添加到灰色队列,将消费过的灰色对象标记为黑色加入到黑色队列;灰色队列消费完后,剩余黑色对象皆是白色对象...图片case 2:当对象D已被标记为灰色,此时产生了D对G的引用,而E却断开了对G的引用,那么G不会被标记,会被回收掉,这属于漏现象。

59811

Fluent NHibernate之旅

ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibernate...4、灵活的Fluent 一、初识Fluent NHibernate(简称Fluent) Fluent NHibernate offers an alternative to NHibernate's...sessionFactory { get; set; } 传统的方式其实已经非常灵活和简单了,但配置文件真的有点头大,那么多的属性...两者之间都各有长短,或许你还没有体会到Fluent的强大,在日后的Mappings时,你会慢慢了解为什么他会叫Fluent。...原本打算把Fluent学习的方法说一下,后来一看,必须要先说Fluent的Mapping才能说到这个,所以暂时先不说了,等到下一章映射的部分再一起来说。

1K60

揭秘HTTP3优先级

同样的,服务器也不知道图像是否立即可见(例如,在viewport中)或者尚未可见(用户需要向下滚动才能看到轮播中的第二张图)。至于新鲜上架的fetchpriority属性,服务器更是闻所未闻。...资源加载延迟 这里要提醒大家,优先级并不是影响实际资源交付顺序的唯一因素。毕竟优先级决定的仅仅是如何处理同时处于活动状态的多个请求。...实际HTTP头只能用于表达资源的初始优先级,一旦稍后需要更新优先级(比如延迟加载的图像最初获得低优先级,但在滚动至视图内时需要切换至高优先级),那单靠HTTP头就实现不了了。...Chromium和Firefox会默认将其设置为“关闭”,就是说服务器不会在多个资源间分配带宽;最重要的资源必须先被完全加载,之后再转往下一个。...假定客户端有一条互联网连接,来自这6个“独立”H1连接的数据包必须在这条线路上交错,以便沿单一通道传输。

62820

为什么需要“跨域隔离”才能获得强大的功能

简介 本文解释了为什么需要跨域隔离才能启用浏览器上的强大功能。 关键术语:本文使用了许多相似的术语。...这将强制执行以下策略:文档只能从同一来源加载资源,或者显式被标记为可从另一来源加载的资源。 为了从其他来源加载资源,需要支持跨域资源共享(CORS)或跨域资源策略(CORP)。...跨域资源共享 如果跨域资源支持跨域资源共享(CORS),则可以使用 crossorigin 属性将其加载到你的网页上,而不会被 COEP 阻止。...Cross-Origin-Resource-Policy 头有三个可能的值: 1Cross-Origin-Resource-Policy: same-site 标记为 same-site 的资源只能从相同站点加载...1Cross-Origin-Resource-Policy: cross-origin 被标记为 cross-origin 的资源可以被任何网站加载

2.1K10

Hibernate面试题大全

Hibernate常见面试题 Hibernate工作原理及为什么要用? Hibernate工作原理及为什么要用?...Hibernate是如何延迟加载(懒加载)? Hibernate是如何延迟加载(懒加载)?...通过设置属性lazy进行设置是否需要懒加载 当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能...因此能提高检索性能,并且能节省内存空间; 缺点: 应用程序如果希望访问游离状态代理类实例,必须保证他在持久化状态时已经被初始化; 延迟加载:lazy=true; 迫切左外连接检索: 优点: 1对应用程序完全透明...都支持哪些缓存策略 hibernate都支持哪些缓存策略 usage的属性有4种: 放入二级缓存的对象,只读(Read-only); 严格的读写(Nonstrict read/write) 读写; 放入二级缓存的对象可以读

2K50

面试必备:2019年Java 最常见 200+ 面试题解析

124. hibernate 实体类必须要有无参构造函数吗?为什么?...MyBatis 是否支持延迟加载延迟加载的原理是什么? MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。...声明队列必须设置持久化 durable 设置为 true. 消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。 消息已经到达持久化交换器。 消息已经到达持久化队列。...以上四个条件都满足才能保证消息持久化成功。 143. RabbitMQ 持久化有什么缺点? 持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。...第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何属性不依赖于其它属性。 165.

47610

java反射的二三事

的方法 Method[] getDeclaredMethods()//获得所以的public和public方法 获得类中属性的方法 Field getField(String name)//根据变量名得到相应的...3.在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象.反射的目的就是为了扩展未知的应用。...就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。很多工厂模式就是使用的反射。...它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。...相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。 即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。

981110

java反射的二三事

的方法 Method[] getDeclaredMethods()//获得所以的public和public方法 获得类中属性的方法 Field getField(String name)//根据变量名得到相应的...3.在编码阶段不知道那个类名,要在运行期从配置文件读取类名, 这时候就没有办法硬编码new ClassName(),而必须用到反射才能创建这个对象.反射的目的就是为了扩展未知的应用。...就是把dll加载进内存,然后通过反射的方式来调用dll中的方法。很多工厂模式就是使用的反射。...它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。...相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。 即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。

67780

Java面试题

124. hibernate 实体类必须要有无参构造函数吗?为什么?...MyBatis 是否支持延迟加载延迟加载的原理是什么? MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。...声明队列必须设置持久化 durable 设置为 true. 消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。 消息已经到达持久化交换器。 消息已经到达持久化队列。...以上四个条件都满足才能保证消息持久化成功。 143. RabbitMQ 持久化有什么缺点? 持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。...第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何属性不依赖于其它属性。 165.

51441

最全java面试题及答案(208道)「建议收藏」

124. hibernate 实体类必须要有无参构造函数吗?为什么?...MyBatis 是否支持延迟加载延迟加载的原理是什么? MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。...声明队列必须设置持久化 durable 设置为 true. 消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。 消息已经到达持久化交换器。 消息已经到达持久化队列。...以上四个条件都满足才能保证消息持久化成功。 143. RabbitMQ 持久化有什么缺点? 持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。...第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何属性不依赖于其它属性。 165.

38330

Java面试题及答案大全(2023持续更新)

124. hibernate 实体类必须要有无参构造函数吗?为什么?...MyBatis 是否支持延迟加载延迟加载的原理是什么?MyBatis 支持延迟加载,设置 lazyLoadingEnabled=true 即可。...声明队列必须设置持久化 durable 设置为 true.消息推送投递模式必须设置持久化,deliveryMode 设置为 2(持久)。消息已经到达持久化交换器。消息已经到达持久化队列。...以上四个条件都满足才能保证消息持久化成功。143. RabbitMQ 持久化有什么缺点?持久化的缺地就是降低了服务器的吞吐量,因为使用的是磁盘而非内存存储,从而降低了吞吐量。...第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。第三范式:任何属性不依赖于其它属性。165.

19.2K54
领券