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

每个子类继承策略使用NHibernate表时使用Casting代理的问题

NHibernate是一个开源的对象关系映射(ORM)框架,用于将对象模型映射到关系数据库中。在使用NHibernate时,可以使用不同的继承策略来映射对象模型的继承关系到数据库表中。

其中,子类继承策略是一种继承策略,它将父类和子类的属性映射到同一个数据库表中。在这种策略下,使用Casting代理可能会遇到一些问题。

Casting代理是指在NHibernate中,为了实现懒加载和延迟加载的功能,会使用代理对象来代替真实的对象。当访问代理对象的属性时,NHibernate会通过代理对象去加载真实对象的数据。然而,在子类继承策略中,由于父类和子类的属性都映射到同一个表中,NHibernate无法确定代理对象的具体类型,从而无法正确加载子类的属性数据。

为了解决这个问题,可以使用NHibernate的显式多态性(Explicit Polymorphism)特性。显式多态性是指在查询数据时,使用特定的查询语句来指定要加载的对象类型,从而避免使用Casting代理。通过显式多态性,可以确保NHibernate正确加载子类的属性数据。

在应用场景方面,子类继承策略适用于具有继承关系的对象模型,并且希望将父类和子类的属性存储在同一个数据库表中的情况。这种策略可以简化数据库表的设计,并且在查询数据时可以方便地获取父类和子类的属性。

对于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体的云计算品牌商,无法给出具体的链接地址。但是,腾讯云提供了云数据库 TencentDB、云服务器 CVM、人工智能服务等相关产品,可以作为云计算领域的解决方案之一。

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

相关·内容

继承HibernateDaoSupport遇到问题 使用注解为HibernateDaoSupport注入sessionFa

使用注解为HibernateDaoSupport注入sessionFactory 都知道spring提供有零配置功能,而且看见别人一个项目使用spring+mybatis,只在applicationContext.xml...里定义了sqlSessionFactory,然后什么都不用配置了,baseDao继承自SqlSessionDaoSupport,只需要在每个dao上加@Repository注解,spring会自动向对象中注入...我用hibernate模仿着人家例子,我也只在applicationContext.xml里定义了sessionFactory,basedao继承自HibernateDaoSupport,结果怎么弄都报错啊...对象自动装配sessionFacotry 那么如何解决这个问题就有很多途径了,比如你自己把HibernateDaoSupport代码拷出来加个自动装配注解,当做自己实现。...super.setSessionFactory(sessionFactory);   }   spring会按照类型自动装配,所以方法名称可以随便写,这样就可以为子类对象自动注入sessionFactory

1.1K100

Fluent NHibernate之旅(三)-- 继承

从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要特性,如果NHibernate没有对它支持,...Table per class hierarchy(所有子类在一张) Table per subclass(父类一张每个子类一张) Other(其他方式) 准备 我们还是以前两篇电子商务来说事...,大家需要注意,子类几个字段,最好设置成null,避免造成不能insert问题。...,好做法是把子类映射区分开来,等一下你会知道,第一种策略和第二种策略都会采用这样方式来进行映射,至于映射会使用subclass还好是join-subclass,FluentNHibernate会自动生成...其他方式 Table per concrete class(每个子类一张),这种方式应该使用union-subclass标签,但FNT不支持这种方式,为什么呢,呵呵,因为这种方式不好,无论是从结构还是编写上来说

68680
  • NHibernate继承模式下通过父类Repository查询子类

    NHibernate中经常遇到继承与关系数据库ORMapping问题,我之前一篇博客(http://www.cnblogs.com/studyzy/archive/2011/08/16/2140675...(类继承) 其中单继承是我个人比较常用比较推荐做法。...使用继承可以不用Join多个查询效率高,而且在Domain Model属性提示到父类或者下降到子类,数据库模型不用更改。...其缺点就是一个数据列比较多,而且很多列为空,不过现代数据库对空列压缩处理已经比较好了,不会产生大量空列造成性能问题和磁盘空间浪费。...以上是以最简单了例子说明了如果通过父类查询具体子类方法,实际项目中肯定比这个查询要复杂,但是只要记住了这三种查询要点,结合其他条件就可以写出NHibernate能够理解查询。

    34220

    对象继承关系在数据库中实现方式和PowerDesigner设计

    在面向对象编程中,使用对象继承是一个非常普遍做法,但是在关系数据库管理系统RDBMS中,使用是外键表示实体()之间关系,那么对于继承关系,该怎么在RDBMS中表示呢?...(类继承) 比如在一个教务系统中,有老师学生2个对象,这两个对象都是“人”对象子类,所以我们可以建立一个Person,该有人公共属性:姓名、性别等,还有就是数据唯一标识,一个ID。...不建立父对象,将父对象所有属性转移到子对象中,为每个子对象建立对于。...3.类继承。 对父对象和每个子对象建立一个对应,然后在子表中设置该子表主键为与父关联外键。...PS:如果使用NHibernate进行编程,那么可以参考这篇文章,介绍了NHibernate对这三种继承配置方法。 如果使用Entity Framework进行编程,那么可以参考这篇文章。

    76110

    NHibernate中对同一个对象Lazyload要设置一致

    NHibernate中出于性能考虑,经常使用Lazyload方式来加载关联对象,关于什么是Lazyload,以及怎么使用,可以参见博客园中文章,比如:http://www.cnblogs.com.../lyj/archive/2008/10/28/1321494.html 常用NHibernate.ByteCode.Castle动态代理来实现Lazyload,使用该程序集会在运行时创建实体对应代理类...,如果实体使用继承关系,并通过NHibernate来映射,那么动态代理类在类型转换时会有问题。...我在调用Flow.Node之前,调用了Task对象,所以NHibernate根据TaskMapping设置,将Node设置为动态代理类,同时将Node缓存到了Session中,然后再调用Flow.Node...总的来说,如果在NHibernate中用到了继承类,如果同时用到了Lazyload,那么在转换类型就可能抛出异常。解决办法就是将Lazyload取消,改为立即加载。

    32120

    如何使用Fluent NhibernateAutomapping进行OR Mapping映射

    最早项目中,我们使用了最传统XML配置文件方式编写映射关系,但是这样太麻烦,每次修改class和都要去修改对应XML文件,而且还容易出错,一定有疏忽遗漏地方,还不容易找出错误,所以在第二个项目中...我们只需要定义好映射规则,就可以不对每个和类分别编写映射配置,而是按照规则进行自动Mapping工作。这样在修改class或者DataTable,只需要修改类和即可,不需要再修改配置文件。...比如我们可以定义如下规则: 类名和字段名采用每个单词首字母大写方式而数据库名和列名使用全部大写,单词之间下划线分割方式。...virtual Class Class{get;set;}) 对于SubClass,采用将多个子对象都存在同一个方式实现,使用“TYPE”列作为DiscriminatorColumn,使用之类类名作为子类唯一标识...Hilo值主键生成方式,使用一个HIBERNATE_UNIQUE_KEY存储每个流水。

    1.1K10

    NET中小型企业项目开发框架系列(一个)

    ,主要是靠Nhibernate定义通用增删改从,然后其它类继承增删改查接口和对应自己定义子类接口,实现拓展 首先,我们从曾经写代码经验知道,我们Dao主要是做增删改查等方面,我们就先定义一个公共方法接口叫做...一个抽象类实现增删改查同一候又添加了子类自身扩展性....,我们能够看到成果了,我们接下来实现,仅仅须要继承上面这个RepositoryBase和IRepository部分就能够非常轻松实现,子类增删改查以及子类扩展了....通过这个继承体系保证了我们在实现增删改查同一候外放一个接口保证扩展性....继承系列图: 总结 这样我们数据訪问层,非常轻松实现了,基本上代码量非常少,增删改查部分差点儿”0″代码,都是泛型父类实现了.抽象、继承、泛型、托付、容器等等大大提高了代码复用性

    57410

    NHibernate联合主键详细示例

    使用NHibernate实现一对多,多对一关联很是简单,可如果要用复合主键实现确实让人有些淡淡疼。虽然很淡疼但还是要去抹平这个坑,在下不才,愿意尝试。...以示例进入正文,源码下载地址: 一、数据关系图 很明显,他是一个自引用数表,实现无限级树结构存储。...实现一对 和 多对一映射 这步没有多大难度,主要处理好注解顺序即可,以及OneToMany联合主键如何设置问题.示例代码如下: [Bag(0, Name = "Childs", Cascade...,与联合主键共用了一个字段GroupNumber,导致在NHibernate做映射转换时候会多计算出一个需要填充值,但SqlParameterCollection中又少一个位置。...BaseInfo实现联合主键(不推荐使用) 在Save,如果用session.merge方法组合缓存与修改对象,返回值主键会为Null 联合主键与联合外键字段不能重复,也不能共用 注意重载GetHashCode

    1.5K80

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

    你也许已经猜到了,它结果是: Base constructor Derived constructor 我们在初始化一个对象,总是会先执行基类构造函数,然后再执行子类构造函数。...原来对于非虚方法调用,编译器会进行一些额外“动作”。比如找出所调用对象实际类型,以访问正确方法(调用b.V()时候就会找到变量b实际类型Derived,从而输出Derived.V)。...比如如果项目中使用NHibernate,框架本身要求ORM实体类中,所有与数据库列具有对应关系属性都必须为虚属性。...这是因为NHibernate为了实现延迟加载,会为每个实体类生成proxy,这些proxy需要重写实体类中属性getter/setter。...但我们要注意,在代码中保证那些可能会被继承实体,在子类中重写那些虚属性,不要依赖于子类自身构造函数(这几乎是可以保证,因为与数据库列映射属性,只能是最简单getter/setter)。

    1.2K110

    Django 模型继承 BaseModel

    常见情况下,你仅将父类用于子类公共信息载体,因为你不会想在每个子类中把这些代码都敲一遍。这样父类永远都不会单独使用,所以 抽象基类 是你需要。...若你继承了一个模型(可能来源其它应用),且想要每个模型都有对应数据,客官这边请 多表继承。 最后,若你只想修改模型 Python 级行为,而不是以任何形式修改模型字段, 代理模型 会是你菜。...'%(class)s' 用使用了该字段子类小写类名替换。 '%(app_label)s' 用小写包含子类应用名替换。每个安装应用名必须是唯一,应用内每个模型类名也必须是唯一。...多表继承 Django 支持第二种模型继承方式是层次结构中每个模型都是一个单独模型。每个模型都指向分离数据,且可被独立查询和创建。...代理模型¶ 使用 多表继承 每个子类模型都会创建一张新。这一般是期望行为,因为子类需要一个地方存储基类中不存在额外数据字段。

    2.1K10

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

    前言 上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate配置内容。这一篇将带领大家了解一下如何使用NHIbernate。...之前提到NHibernate继承了Hibernate一些传统:使用XML文件进行配置,这一点也是备受争议。...assembly:指定映射对象所在assembly,一般情况指的是项目名称 namespace:所在命名空间 default-access:可选,默认是property,表示NHibernate读取数据列策略...column:对应数据列名 type:数据库中类型 1.2.3 many-to-one 在Nhibernate中,多对一配置是在一一端,表示该类有一个外键导航。...,不同地方在于一对一需要在双方映射关系里均要维护,在有外键/实体中 添加 constrained=“true”。

    1.1K20

    Spring原理剖析

    即为数据增加一个版本标识,在基于数据库版本解决方案中,一般是通过为数据库增加一个 “version” 字段来实现。读取出数据,将此版本号一同读出,之后更新,对此版本号加一。...Bean和代理 每个Bean有一个代理 所有Bean共享一个代理基类 使用拦截器 使用TX标签配置拦截器 全注解配置 无论哪种配置方式,一般变化只是代理机制这部分 5种实现方式 每个Bean都有一个代理...在java中由具体类来实现 工厂方法模式使用继承自抽象工厂角色多个子类来代替简单工厂模式中“上帝类”。...策略等级结构定义了一个算法或行为族。恰当使用继承可以把公共代码移到父类里面,从而避免代码重复 使用策略模式可以避免使用多重条件(if-else)语句。...换言之,策略模式只适用于客户端知道算法或行为情况 由于策略模式把每个具体策略实现都单独封装成为类,如果备选策略很多的话,那么对象数目就会很可观 Spring策略模式实现 Spring 中策略模式使用有多个地方

    69410

    django 1.8 官方文档翻译: 2-1-1 模型语法(初稿)

    但在抽象基类上这样做就会引发一个很严重问题。因为 Django 会将基类字段添加到每个子类当中,而每个子类字段属性值都完全相同 (这里面就包括 related_name)。...注:这样每个子类关联字段都会指向同一个字段。 当你在(且仅在)抽象基类中使用 related_name ,如果想绕过这个问题,就要在属性值中包含 ‘%(class)s’ 字符串。...多表继承 这是 Django 支持第二种继承方式。使用这种继承方式,同一层级下每个子 model 都是一个真正意义上完整 model 。...代理model 这部分是在 Django 1.1 中新增: 请查看版本文档 使用 多表继承(multi-table inheritance) ,model 每个子类都会创建一张新数据,通常情况下...不管你怎么改动,都不会在查询 User 得到 MyUser。 基类限制 代理 model 必须继承自一个非抽象基类。你不能继承自多个非抽象基类,这是因为一个代理 model 不能连接不同数据

    3.1K30

    【SSH快速进阶】——Hibernate继承映射:每棵继承树映射一张

    Hibernate为继承映射提供了三种策略   1、每棵继承使用一张   2、每个子类使用一张   3、每个具体类使用一张   本文对第一种策略进行说明。...上图中Pig类和Bird类继承Animal类,每棵继承树对应一张,即在同一棵继承树中,所有的类对象信息(记录)共同存放到一张中,要判断某条记录属于哪个对象,需要在中添加一个字段进行区分(比如下表...父类还用标签来定义即可;添加区分字段(比如上面1中Type字段)需要用标签来定义;用标签定义两个子类,与父类“合并”在同一张表里,子类特有属性用...插入父类(Animal),默认把类名当做type了 查询测试 ---- load查询   根据配置,鉴别值(type)在存储时候会自动存储,在加载时候也会根据鉴别值映射取得相应对象。...,但是粒度比较粗,有冗余字段;但又是因为多个类相关记录都存放在一张中,查询不用关联,因此效率较高。

    38820

    Entity Framework 继承映射

    (Table per Concete class):完全丢弃多态和继承 零、TPH TPH是将整个类层次映射到但中,该包含所有类中所有属性,特定行表示具体子类通过 discriminator 来标识区分...一、TPT TPT是常用策略,通过外键来表示继承,父类和子类分别位于不同中,子类包含自身属性列和父类外键,并将父外键作为子类主键。...二、 TPC TPC是不被推荐策略,因为他会为每个子类创建一个,并且将父类中所有属性映射进每个子类中。...要解决这个问题需要为每个指定不同标识,也可以关闭主键属性标识。...下面总结一下以上三种策略使用场景 策略 场景 TPC 不需要多表关联查询或者很少查询父类数据,并且没有与父类关联类 TPH 需要多表关联查询,且子类属性较少 TPT 需要多表关联查询,且子类属性很多

    79410

    NHibernate 代码映射实体类

    NHibernate 代码映射实体类 关于代码映射 NHibernate 3.2 自带了代码映射机制, 作为 xml 映射之外一种映射方式, 由于推出时间比较晚, 所以资料相对比较少, 而且与社区版...下面就通过一个实例来说明怎么使用 NHibernate 自带代码映射。 实体关系 要映射类关系图如下: ?...; 使用代码映射 使用 xml 做实体类映射, 推荐一个实体类对应一个 xml 文件, 用代码映射也推荐这样, 一个实体类对应一个映射类, 一个映射类一个文件。...public ProductMapping() { // 此处添加映射代码 } } 映射到数据 使用 Table 函数将类映射到制定数据: Table("product")...总结 与 xml 映射以及其它第三方映射相比, 使用 NHibernate 代码映射有下面几个优点: 不需要使用 xml 文件即可完成, 可以充分利用 IDE 智能提示, 重构, 以及编译检查; 与

    90010

    第一次面阿里,难绷!

    感觉问问题还挺多,面试时长有 1小+,压力不小,面试官一直追问。...可重复读,指一个事务执行过程中看到数据,一直跟这个事务启动看到数据是一致,MySQL InnoDB 引擎默认隔离级别,解决了不可重复读问题,并且以很大程度上避免幻读现象发生。...t_order.frm ,t_order 结构会保存在这个文件。在 MySQL 中建立一张都会生成一个.frm 文件,该文件是用来保存每个元数据信息,主要包含结构定义。...这种方式需要代理类实现一个或多个接口。 基于CGLIB动态代理:当被代理类没有实现接口,Spring会使用CGLIB库生成一个被代理子类作为代理。...继承继承是一种机制,允许一个类(子类继承另一个类(父类)属性和方法。子类可以重用父类实现并定义自己特定行为。Java中继承支持单继承,但一个类可以实现多个接口(接口多继承)。

    20710

    django 1.8 官方文档翻译:2-1-1 模型语法

    通常,你只想使用父类来持有一些信息,你不想在每个子模型中都敲一遍。这个类永远不会单独使用,所以你使用抽象基类。 如果你继承一个已经存在模型且想让每个模型具有它自己数据库,那么应该使用多表继承。...但在抽象基类上这样做就会引发一个很严重问题。因为 Django 会将基类字段添加到每个子类当中,而每个子类字段属性值都完全相同 (这里面就包括related_name)。...多表继承 这是 Django 支持第二种继承方式。使用这种继承方式,同一层级下每个子 model 都是一个真正意义上完整 model 。...代理模型 使用  多表继承,model 每个子类都会创建一张新数据,通常情况下,这正是我们想要操作。这是因为子类需要一个空间来存储不包含在基类中字段数据。...基类限制 代理 模型必须继承自一个非抽象基类。 你不能继承自多个非抽象基类,这是因为一个代理 model 不能连接不同数据

    5K20

    多图详解Spring框架设计理念与设计模式

    我们知道Bean包装是Object,而Object必然有数据,如何给这些数据提供生存环境就是Context要解决问题,对Context来说他就是要发现每个Bean之间关系,为它们建立这种关系并且要维护好...SpringBean创建典型工厂模式,他顶级接口是BeanFactory,下图是这个工厂继承层次关系: ?...注意BeanFactory对象类型变化,前 面介绍了他有很多子类,在什么情况下使用不同子类这非常关键。...◆Strategy:抽象策略,定义每个策略都要实现策略方法 ◆ConcreteStrategy:具体策略实现类,实现抽象策略中定义策略方法 ◆Spring中策略模式实现 ◆Spring中策略模式使用有多个地方...这里主要看一下代理对象创建策略模式实现。 前面已经了解Spring代理方式有两个Jdk动态代理和CGLIB代理。这两个代理方式使用正是使用策略模式。它结构图如下所示: ?

    1.4K20
    领券