我目前正在使用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;
有解决方法吗?
谢谢大家!
答案 0 :(得分:0)
您未按照定义AbstractItemJPA的方式向我们提供。
然而,使用@MappedSuperclass注释的类不是实体。它只是一个用于与子项共享映射信息的类。
因此,您无法创建与此类的关联。只能创建与实体的关联。
你应该问自己是否真的需要这么复杂的类层次结构。保持实体模型简单,并控制类的层次结构将如何存储在表中(一个表或多个表?)。