使用JPA(+ Hibernate)嵌入抽象类

时间:2011-08-07 21:56:09

标签: java inheritance jpa abstract embeddable

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

  • 班级OwnerEntity。它有@EmbeddedAbstractParent的实例。
  • 班级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

2 个答案:

答案 0 :(得分:2)

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

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

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

基本思想是主类(所有者/计算机)嵌入另一个类(Parent / AbstractDisplay),根据嵌入类的类型,它可以有不同的参数集。

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

答案 1 :(得分:0)

嵌入Abstract类没有任何逻辑意义,如果它是Abstract则无法实例化。您需要在为什么上重新构建逻辑,您认为需要嵌入Abstract类,而不是特定的实现。