5

我正在尝试实现这个 JPA 模型:

  • Owner是一个Entity. 它有@Embedded类的实例AbstractParent
  • AbstractParent@Embeddable. 它是一个抽象类,这个类有两个孩子。孩子是具体的类。

例外是:Cannot instantiate abstract class or interface: AbstractParent

似乎(1)我需要组件继承,但是(2)JPA中不允许组件继承,(3)它没有在Hibernate中实现。你能确认(1)、(2)和(3)是正确的吗?如果它们是正确的,您能否提供任何建议或解决方法?我使用 hibernate-jpa 2.0、hibernate-core 3.5.1、hibernate-core-annotations 3.2.0

4

2 回答 2

3

要回答为什么需要这种实现的问题:这里有一个例子。数据库表有关于计算机的信息,计算机有显示器,如果显示器是 LCD,那么它的参数是“像素”。如果显示器是电视,那么它的参数是“线”。所有监视器也有参数“权重” 该表的数据结构包括:id、RAM、monitor_indicator、权重、线条、像素。

这个数据结构可以在类中实现:

  • Computer{id, RAM, display}
    • 它包含有关计算机的信息。
  • 抽象类AbstractDisplay{weight}
    • 它具有有关显示器的一般信息。
  • LCDDisplay{pixels} 类继承类AbstractDisplay
    • 它具有 LCD 特定信息(像素)。
  • TVDisplay{lines} 继承类AbstractDisplay
    • 它具有电视特定信息(线路)。

基本思想是主类(所有者/计算机)嵌入另一个类(父/抽象显示),该类可以根据嵌入类的类型具有不同的参数集。

关于如何实例化嵌入式抽象类:与现在在JPA中实例化抽象类的方式相同:在上面的示例中,“monitor_indicator”表示应该使用的子类,该字段必须在类Computer实例化期间存在。

于 2011-08-08T14:25:33.373 回答
-1

嵌入一​​个Abstract类没有任何逻辑意义,如果它是Abstract. 你需要重新思考你为什么认为你需要嵌入一个Abstract类而不是一个特定的实现的逻辑。

于 2011-08-08T00:37:55.557 回答