2009-10-13 103 views
0

我工作的系统中有一个名为订购AbstractPersistentObject继承的域对象。现在我需要添加名为ExternalOrder的另一个域对象,它具有Order的一些属性,但不是全部。我希望这两个对象在某些地方被处理为polymorphically。因此我正在考虑实现继承映射。Hibernate的继承映射和属性来覆盖

我创建了一个AbstractOrder现在扩展AbstractPersistentObject和移动的共同属性AbstractOrder。 Order和ExternalOrder现在扩展了AbstractOrder。

由于Order表在数据库中已经有很多数据,所以我不希望对模式做太多的修改。

  1. 如果我省略InheritanceType.SINGLE_TABLE,哪种继承策略对我更好?我应该提到,我必须在至少一个域对象中使用OnetoMany联接。领域对象将引用AbstractOrder,Hibernate将在运行时决定AbstractOrder的具体子类。

  2. AbstractPersistentObject具有属性ID的@Id和@GeneratedValue(strategy = GenerationType.IDENTITY)。当我实现继承时,有没有办法覆盖这个?据我所知,GenerationType.IDENTITY不适用于某些继承选择,我不知道如何覆盖它。我已经看过@AttributeOverride但我认为它只有当你想覆盖某些@Column值时才有用。

回答

1

1)在这里你没有太多选择。其他两种继承映射策略是table per class,它不适用于您(因为它不支持IDENTITY)和joined subclasses,这将要求您将“订单”表拆分为两个(AbstractOrder和Order),并为ExternalOrder添加另一个表。

2)您不能在继承层次结构中覆盖id上的属性。但是,这种情况也是如此,但每班级的策略绝对不是理想的。