1

私は webapp でトップリンク JPA を使用しており、1 つのテーブルだけをクラス階層にマップしたいと考えています。ほとんどのデータを表す 1 つのクラスと、それを継承する 1 つのクラスが必要です (そのため、スーパークラスのすべてのフィールドと、大量のデータを保持する他のいくつかのフィールドを取得します)。常に大量のデータが必要なわけではなく、リクエストオブジェクトなどに保持したくありません。誰かが要約の1つを選択したときにのみ、大きなビットが必要です。クラスを次のようにセットアップしました(例として簡略化しています)。

@Entity
@Table(name = "TRANSCRIPTS")
@MappedSuperclass //also tried without this - same error
public class Summary {

    @Id
    @Column(name = "id")
    private long id;
    @Column(name = "title")
    private String title;

    //rest of class etc.
}

@Entity
@Table(name = "TRANSCRIPTS")
public class Detail extends Summary {

    @Id
    @Column(name = "fullText")
    private String fullText;

    //rest of class etc.
}

この階層を使用してデータを取得しようとすると、次の行に沿ってエラーが発生します

Unknown column 'DTYPE'

したがって、記述子列を探しています。そのような関係ではないので、私は設定していません。

JPAでこの要約/詳細関係をマッピングする別の方法はありますか? または、クラスの継承をあきらめて、2 つの別個の無関係なクラスを作成する必要があります。1 つは要約データを表し、もう 1 つは完全なデータを表します (そして要約フィールドを再定義します)。

ありがとう。

4

1 に答える 1

1

DTYPE Toplinkがエンティティから選択するためにアクセスしようとするのは識別子列です。その列をテーブルスキーマに追加すると、機能を開始します。

DTYPEは、データベース内のINTEGER型の列です。

次のコードスニペットを使用して、独自の識別子列を指定できます。

@Entity
@DiscriminatorColumn(name="type",discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue("1")
class TestClass {}

ここにあなたのためのいくつかのドキュメントがありますhttp://www.oracle.com/technetwork/middleware/ias/toplink-jpa-annotations-096251.html#CHDJHIAG

于 2012-08-24T15:39:28.970 に答える