具有隐式多态性的每个具体类的表有啥实际用途吗?

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 知道这些子类中的每一个都有自己的映射,并且它们是独立的,我只是没有意识到这一点。谢谢

以上是关于具有隐式多态性的每个具体类的表有啥实际用途吗?的主要内容,如果未能解决你的问题,请参考以下文章

java的多态怎么理解啊,多态有啥用途。

java编程思想

类多态抽象接口小结

java 封装,继承,多态基础

具有具体类特定属性条件的多态 HQL 查询;可以吗?

重载和重写有啥区别