27

次のエンティティがあります。

@Entity
public class TestCaseStep implements JPAEntity<Integer> {

        ...

    @Column(name="STEP_NUMBER")
    private Integer stepNumber;

    @Enumerated(EnumType.STRING)
    @Column(name="ACTION")
    private Action action;

    **@ManyToOne
    @JoinColumn(name="connector")
    private ScriptItem connector;**

私の属性 ScriptItem は、他の 3 つのクラスのインターフェイスです。ランタイム実行で正しいクラス ID を設定するように JPA を構成することは可能ですか?

その他のリソース:

public interface ScriptItem {

    String getValue();
    ScriptItemType getType();
}

@Entity
@Table(name="DAT_FEED_XML")
public class FeedXml implements JPAEntity<Integer>, ScriptItem {
    ...
}

@Entity
@Table(name="DAT_DB_STMT")
public class DbStatement implements JPAEntity<Integer>, ScriptItem {
       ...
}

3 つのクラスのうちの 1 つの ID を保存したいことを JPA に理解させるには、どの注釈を使用すればよいですか?

前もって感謝します、

4

4 に答える 4

12

これは本当に良い考えですが、残念ながらエンティティ属性としてインターフェイスを直接マッピングすることは JPA ではサポートされていません。

で直接注釈が付けられた最上位クラスのみをマップできます@Entity。ただし、この最上位クラスはインターフェイスを実装する場合があります。

この機能は、長い間要求され、議論されてきました。

thisthisも見てください。

達成しようとしていることに応じて、クラスごとのテーブル戦略を使用した@Inheritanceアノテーションがオプションになる可能性があります。

お役に立てば幸いです。

于 2012-09-27T20:32:23.757 に答える
0

好みの戦略を使用して、JPAでScriptItemの継承を正しく設定する必要があります(ドキュメントを参照)。そうすれば、JPAはそれについて賢くなります。

于 2012-09-27T18:18:25.503 に答える