2016-10-18 8 views
0

Attachmentエンティティを作成して、異なるタイプのエンティティに関連する可能性がありますので、@Any注釈を使用しようとしています。私のコードは次のようである:Spring JPA:@Any`アノテーションを持つオブジェクトのプロパティIDが見つかりません

@Entity 
public class Attachment{ 
    @XmlElement 
    @Any(metaColumn = @Column(name = "containerType"), fetch = FetchType.LAZY) 
    @AnyMetaDef(idType = "long", metaType = "string", 
     metaValues = { 
      @MetaValue(targetEntity = TestApp.class, value = "TestApp") 
    }) 
    @JoinColumn(name = "container_id") 
    private Object container; 

    @XmlElement 
    @Column(insertable = false, updatable = false) //this I added cause Hibernate said so 
    private String containerType; 
} 

私の問題は、今、私は私のアプリを起動すると、DBの初期化がで失敗していることである。これまでのところ、正確にある@Anyを使用しての
org.springframework.data.mapping.PropertyReferenceException: No property id found for type Object! Traversed path: Attachment.container

すべての例私が見つけました同じ。では、これを行う正しい方法は何ですか?

答えて

0

は、これまでのところ私はgetId()方法でIAttachableのインターフェースを提供し、私の関係の定義にIAttachableObjectを交換することによってこれを克服するために管理してきました。

これが最善の方法であるかどうかはわかりませんが、これまでのところうまくいきます。

0

エラーが表示されるフィールド: @JoinColumn(name = "container_id") プライベートオブジェクトコンテナ。

JoinColumnを使用していますが、JPAはObjectにIDフィールドを見つけることができません。意味は、JoinColumnを使用する場合、JPAは現在の表の列名、この場合はAttachment、および結合表の参照列は、containerであることが必要です。

しかし、あなたが言ったように、このテーブルをさまざまなタイプのエンティティに関連させたいとします。私はあなたがそれをすることはできないと思う。私の理解では、JPAは「静的な」説明のようなものです。あなたはそれを「ダイナミック」にすることはできません。

+0

ここで問題となっているのは、私が今までに見つけたすべての例が、私が示したものと同じだから、これはうまくいくと思います。 – svz

+0

通常は 'JoinColumn'を使うので、フィールドの型は' ID'を持つEntityです。したがって、JPAはPKを参照列として使用するため、デフォルトでは追加する必要はありません – Mavlarn

関連する問題