Nhibernate 单独表的继承关系

来源:互联网 发布:程序员的网站有哪些 编辑:程序博客网 时间:2024/05/22 01:38

      原先项目使用A表--类名AItem,后来项目需要增加了相同结构的B表--类名BItem,并继承AItem,在使用HQL查询过程中发现,From AItem 会被替换成From BItem,查资料后,发现是NHibernate的继承机制:

      在NHibernate中是用多态(polymorphism)来进行描述两个继承于同一父类的子类情况,在映射文件的Class节点中也有一个polymorphism的属性用来设定是隐式还是显式的使用查询多态,为什么我们的映射类中没有出现这个属性的设定呢,polymorphismimplicit是默认的。所以我们如果进行的是隐式的查询就可以不用进行设定。以下是摘自博客园renrenqq 翻译的NHibernate中文文档中对polymorphism的解释:

Implicit (隐式)的多态是指,如果查询中给出的是任何超类、该类实现的接口或者该类的名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。Explicit (显式)的多态是指,只有在查询中给出的明确是该类的名字时才会返回这个类的实例;同时只有当在这个 <class> 的定义中作为 <subclass> 或者 <joined-subclass> 出现的子类,才会可能返回。 大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个轻型的类,只包含部分表字段)。

      解决方案:修改AItem的映射文件:class 增加 polymorphism="explicit"。