代码之家  ›  专栏  ›  技术社区  ›  Otávio Décio

ORM遗传

  •  11
  • Otávio Décio  · 技术社区  · 16 年前

    真正地

    或者ORM继承是一个“天上的馅饼”的概念?

    4 回复  |  直到 16 年前
        1
  •  7
  •   Guillaume    16 年前

    我已经将继承与Hibernate(还有一些与Django)结合使用,并对此深表遗憾。

    “组合优先于继承”原则对于域类尤其适用。虽然我同意在一些情况下继承在模型级别上是有意义的,但在大多数情况下继承将提供一个非常静态的域模型,其中一个对象将无法更改为另一个类。

    我还发现,大多数开发人员对数据库级别的继承概念并不熟悉,因此维护变得更加复杂。

    最后,还有一些技术问题,比如Hibernate放置的代理将隐藏对象的实际类。它使“实例”的行为变得僵硬。当然,您可能会说“的实例”是一种代码味道,这可能是另一个提示,说明组合可能是更好的解决方案。。。

        2
  •  5
  •   GBa    16 年前

        3
  •  3
  •   hazzik    10 年前

    如果您指的是域类中的继承,我一直在使用NHibernate和/或Castle ActiveRecord,它们支持三种映射策略:

        4
  •  1
  •   Neil McGuigan    9 年前

    如果您正在编写复杂的业务软件,您需要它。

    比如说,你想把东西卖给个人或组织。在销售订单上,买方可能是其中之一。没有继承权你怎么做?

    @Entity
    @Inheritance
    public abstract class Party {
    
      @Id
      private Long id;
    
      ...
    }
    
    @Entity
    public class Individual extends Party {
      ...
    }
    
    @Entity
    public class Organization extends Party {
      ...
    }
    
    @Entity
    public class SalesOrder {
    
      private Party buyer;
    
      ...
    }
    

    然后你可以做:

    salesOrder.setBuyer(someOrganization) salesOrder.setBuyer(someIndividual)