2016-05-13 3 views
0

私は現在JPA(EclipseLink)を使用していますが、OneToMany関係のtargetEntityパラメータが原因で停止しています。targetEntity in OneToMany JPA関係とAbstractClass

@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; 

私はimplItemの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

あなたはAbstractItemJPAを定義した方法を教えてくれませんでした。

しかし、@MappedSuperclassで注釈付けされたクラスはエンティティではありません。子とのマッピング情報を共有するために使用されるクラスです。

したがって、このクラスへの関連付けを作成することはできません。エンティティへの関連付けだけが作成できます。

このような複雑なクラス階層が本当に必要な場合は、自分自身に質問する必要があります。エンティティモデルをシンプルに保ち、クラスの階層をテーブル(1つのテーブルまたは複数のテーブル)に格納する方法を制御できます。