0

JPAモデルで表されるテーブルが3つあります。

最初の1つ:

@Entity
@Table(name = "DECISION")
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Decision {
    @Id
    private Long id;
}

次のクラスは決定を拡張します:

@Entity
@Table(name = "SPECIFIC_DECISION")
public class SpecificDecision extends Decision {
    @OneToOne
    @JoinColumn(name = "PERSON_ID")
    private Person person;
}

最後はPersonで、個人情報を含む単純なエンティティクラスです。

データベースからすべての決定を選択しようとすると、永続ユニットがデータベーススキーマと矛盾しているという情報でエラーが発生します。これは、列DECISION.PERSON_IDが存在しないのに、SPECIFIC_DECISIONテーブルにあるため、マップした方法です。 JPAモデルで。

SpecificDecisionに関係がなく、単純なNUMBERフィールドとVARCHARフィールドのみである場合、さらに興味深いことに、すべてが正常に機能します。

私は何が間違っているのですか?

4

2 に答える 2

1

私の問題の解決策があるようです。デフォルトでは、JPA はベース テーブル内の結合された列を検索します。この動作を変更するには、JoinColumn アノテーションの属性「テーブル」が必要です。

@Entity
@Table(name = "SPECIFIC_DECISION")
public class SpecificDecision extends Decision {
    @OneToOne
    @JoinColumn(table = "SPECIFIC_DECISION", name = "PERSON_ID")
    private Person person;
}

問題が解決しました。

于 2012-09-17T09:21:30.813 に答える
0

DiscriminatorColumn が定義されていませんが、それが問題の原因かどうかはわかりませんが、JPA 仕様によれば、JOINED 戦略を使用する場合は、一部のプロバイダーがサポートしていなくても、常に Discriminator を使用する必要があります。弁別器に関する詳細情報へのリンク

于 2012-09-14T11:28:12.420 に答える