代码之家  ›  专栏  ›  技术社区  ›  nkirkes

nhibernate是否支持使用复合ID将抽象类映射到不同的表?

  •  1
  • nkirkes  · 技术社区  · 15 年前

    我有一个复杂的3nf数据库,为特定的项目提供给我。我希望避免使用每个表域设计的类。相反,我希望在从概念业务的角度使用域对象之后对它们进行建模。

    关键在于如何正确地保存这些信息。我知道我可以走ADO路线,但我想尝试一下使用nhibernate,因为它已经成功地用于其他具有更灵活数据存储的项目。

    因此,我需要知道NHibernate是否支持以下方案:

    我有一个名为ProjectStatus的概念性对象,它由一些用于各种活动的日期戳以及一些关于状态的注释组成。构成ProjectStatus的所有数据都来自2个或多个表。没有ProjectStatus表。

    我知道我可以在我的NH映射中做一个联合子类来让它工作,但是…

    其中一个表包含我需要的大部分信息,它有一个复合ID(两个pk字段一起构成标识签名)。我知道NH也支持复合ID,但是如何在复合键上映射我的联合呢?我需要在union子类部分下面指定一个复合键吗?

    DBA拒绝改变她近乎神经质的3NF数据模型,所以我只能停留在前面。如果为了发展的方便/速度,我不得不放弃ADO,那就这样吧,但我希望NH能够超越……

    1 回复  |  直到 15 年前
        1
  •  0
  •   yfeldblum    15 年前

    我收集到您有一个基类和两个子类,您希望使用每个具体类映射策略的表映射到两个子类表。两个子类表需要声明相同的主键,而主键需要在基类映射中映射。你必须申报 id composite-id 在基类映射中,这样您就可以向nhibernate请求具有给定ID或复合ID的基类类型的对象。您不能在子类映射中声明它们,而且对于每个子类类型,您当然不能声明它们是不同的(这就是在子类映射中声明它们的方法),因为从strOngly*类型的面向对象的透视图,这将离开理智的领域。

    *对我来说,强类型化意味着变量是静态类型化的(每个变量的类型由编译器知道并强制执行),对象是严格类型化的(每个对象的类型由运行时知道并强制执行)。