有没有办法将一个类声明为@MappedSuperclass,例如为了继承公共属性并且并行地让该类能够在其他类中作为对象属性被引用?
更多背景信息:
我有一个类,它具有所有扩展类都应该具有的一些属性,例如
class Resource {
String id;
String description;
String value;
}
这将是@MappedSuperclass 的一个用例。所有扩展类/类型都将从该类继承。
但我还有其他课程,例如
@Entity
class MyList extends Resource {
Resource firstElement;
MyList otherElements;
}
因此,在这里,我将无法拥有firstElement
Resource 类型的对象属性,因为 Resource 不是@Entity。
这可能吗?你会建议做什么?
在这种情况下,我想到了一些事情:
- 我想使用 JOINED 继承,因为这允许我在数据库级别拥有一个非常漂亮和干净的模式。我为每个类和子类和漂亮的外键引用都有一个表。当然这里的缺点是查询对象时有更多的连接,但没关系。
- 我不想使用 TABLE_PER_CLASS 继承,因为我有一堆数据模型类以及平均 3 的类级别层次结构。使用 TABLE_PER_CLASS 意味着拥有包含大量列的数据库表。
- 当我
Resource
成为@Entity 并查询数据库时,假设Resource.value
这将导致连接大量表。在我的数据模型中大约有 50-60 个表。
你遇到过这样的设计问题吗?您如何在干净的数据库设计和性能之间取得平衡?许多人推荐 TABLE_PER_CLASS 继承层次结构(还没有尝试过),尽管我无法想象在一个表中拥有所有类的所有属性......