可嵌入的抽象类与JPA (+Hibernate)



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

  • Owner类为Entity类。AbstractParent@Embedded实例
  • 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

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

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

  • Computer {id, RAM,显示}
    • 它有关于计算机的信息。
  • 抽象类AbstractDisplay {weight}
    • 它有关于显示的通用信息。
  • LCDDisplay {pixels}继承类AbstractDisplay
    • 显示LCD特定信息(像素)。
  • TVDisplay {lines}继承类AbstractDisplay
    • 有电视特定信息(行)。

基本思想是主类(Owner/Computer)嵌入另一个类(Parent/AbstractDisplay),该类可以根据嵌入类的类型拥有不同的参数集。

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

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

最新更新