我正在尝试实现这个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,显示}- 它有关于计算机的信息。
抽象类 - 它有关于显示的通用信息。
- 类
LCDDisplay
{pixels}继承类AbstractDisplay
- 显示LCD特定信息(像素)。
- 类
TVDisplay
{lines}继承类AbstractDisplay
- 有电视特定信息(行)。
AbstractDisplay
{weight}基本思想是主类(Owner/Computer)嵌入另一个类(Parent/AbstractDisplay),该类可以根据嵌入类的类型拥有不同的参数集。
关于如何实例化嵌入式抽象类:与JPA中实例化抽象类的方式相同:在上面的示例中,"monitor_indicator"表示应该使用的子类,该字段必须在实例化类Computer时存在。
嵌入Abstract
类没有任何逻辑意义,如果它是Abstract
,则无法实例化。你需要在上重新工作你的逻辑,为什么你认为你需要嵌入一个Abstract
类,而不是一个特定的实现。