如何组合MappedSuperclass行为并将该类声明为Entity?

时间:2013-07-31 19:01:57

标签: java hibernate inheritance jpa hierarchy

有没有办法让一个类被声明为@MappedSuperclass,例如为了继承公共属性并且并行使该类能够作为其他类中的对象属性引用?

更多背景资料:

我有一个类,其中包含所有扩展类应具有的属性,例如

class Resource {
   String id;
   String description;
   String value;
}

这将是@MappedSuperclass的一个用例。所有扩展类/类型都将从该类继承。

但我还有另一个班,例如

@Entity
class MyList extends Resource {
   Resource firstElement;
   MyList otherElements;
}

所以,在这里,我将无法拥有Resource类型的对象属性firstElement,因为Resource不是@Entity。

这可能吗?你会建议做什么?

我在这方面考虑过的一些事情:

  • 我想使用JOINED继承,因为这允许我在数据库级别上拥有一个非常漂亮和干净的模式。我为每个类和子类都有一个表和很好的外键引用。这里的缺点当然是查询对象时有更多的连接,但没关系。
  • 我不想使用TABLE_PER_CLASS继承,因为我有一堆数据模型类,平均级别为3级。使用TABLE_PER_CLASS意味着拥有大量列的数据库表。
  • 当我让Resource成为@Entity并且我查询数据库时让我们说Resource.value这会导致大量表的连接。在我的数据模型中大约有50-60个表。

您遇到过这样的设计问题吗?您是如何在干净的数据库设计和性能之间取得平衡的?许多人推荐使用TABLE_PER_CLASS继承层次结构(尚未尝试过),尽管我无法在一个表中对所有类的所有属性进行映像...

0 个答案:

没有答案