具有隐式多态性的每个具体类的表有啥实际用途吗?
Posted
技术标签:
【中文标题】具有隐式多态性的每个具体类的表有啥实际用途吗?【英文标题】:Any real use for table-per-concrete-class with implicit polymorphism?具有隐式多态性的每个具体类的表有什么实际用途吗? 【发布时间】:2012-02-01 14:53:28 【问题描述】:如果使用每个具体类的表映射继承,而像任何其他类(没有联合子类)一样简单地映射具体类,NHibernate 允许跨子类使用相同的 PK。例如,如果您有 BillingDetails 以及 CreditCard 和 BankAccount 的子类,则请求所有 BillingDetails 将从两个表中获取所有记录,而这些记录又可能具有重复的主键,由于这些对象的业务身份无效,这可能会出现问题。 guid 之类的情况当然不是这样,但是普通身份或序列 id 生成器的情况呢?
简单地说,问题是,在请求这样的多态查询时,是否真正使用了这种重复 id 键的场景?在内部处理实体时,这些重复的 id 会给 NHibernate 带来问题吗?
【问题讨论】:
【参考方案1】:在映射表不共享公共键的旧模型时,需要隐式多态。
获取具有相同 ID 的 CreditCard 和 BankAccount 实例的 BillingDetails 列表没有问题,因为 NH 知道它们是不相关的(并且它们被视为相关仅用于查询,通过为每个映射运行一个查询子类)
您不应该将其用于未开发的开发。
【讨论】:
是的,你说的很对,NHibernate 知道这些子类中的每一个都有自己的映射,并且它们是独立的,我只是没有意识到这一点。谢谢以上是关于具有隐式多态性的每个具体类的表有啥实际用途吗?的主要内容,如果未能解决你的问题,请参考以下文章