targetEntity在OneToMany JPA Relation和AbstractClass中

时间:2016-05-13 08:44:42

标签: java jpa abstract-class one-to-many

我目前正在使用JPA(EclipseLink),但我因为OneToMany关系的targetEntity参数而陷入困境。

@Entity
@Table(name = "INVENTORY")
public class InventoryJPA implements IInventory {

    /**
     * Unique identifier of the inventory
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private int id;

    /**
     * The list of resources avalible in the inventory.
     */
    private transient Map<Resource, Integer> resources = null;

    /**
     * The list of items in the inventory.
     */
    @OneToMany( targetEntity = AbstractItemJPA.class,
            cascade = CascadeType.ALL)
    private List<IItem> items = null;

我有一个impI的AbstractItemJPA类。一个IItem接口。 和其他抽象类扩展AbstractItemJPA。

这是一个例子:

@MappedSuperclass
public abstract class AbstractControlItemJPA extends AbstractItemJPA implements IControlItem

似乎EclipseLink不想为targetEntity参数使用AbstractClass。

@OneToMany( targetEntity = AbstractItemJPA.class,
                cascade = CascadeType.ALL)
        private List<IItem> items = null;

有解决方法吗?

谢谢大家!

1 个答案:

答案 0 :(得分:0)

您未按照定义AbstractItemJPA的方式向我们提供。

然而,使用@MappedSuperclass注释的类不是实体。它只是一个用于与子项共享映射信息的类。

因此,您无法创建与此类的关联。只能创建与实体的关联。

你应该问自己是否真的需要这么复杂的类层次结构。保持实体模型简单,并控制类的层次结构将如何存储在表中(一个表或多个表?)。