私は、1対1の関係を持つA
とB
エンティティを持っています。私はDBにそれらを挿入したいとき、私は次のエラーを取得する:JPAの休止状態での1対1の関係の外部キー制約
Cannot add or update a child row: a foreign key constraint fails (
mydb
.a
, CONSTRAINTFK_77pkrkrin5nqsx16b6nw6k9r7
FOREIGN KEY (id
) REFERENCESb
(b_id
))
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true, value={"hibernateLazyInitializer", "handler"})
@Generated("org.jsonschema2pojo")
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JsonIgnore
private Integer id;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
@PrimaryKeyJoinColumn(referencedColumnName="AId")
@JsonIgnore
private B b;
}
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true, value = {"hibernateLazyInitializer", "handler"})
@Generated("org.jsonschema2pojo")
@Entity
public class B {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int bId;
@OneToOne()
@JsonIgnore
private A a;
}
私はoptional=false
を削除する場合は、挿入操作が完璧に動作します。オブジェクトをDBに挿入する前にオブジェクトをチェックして、A
にB
が、B
にA
が含まれていることを確認しました。
A
とB
作成するためのSQLスクリプトは次のとおりです。Hibernateのドキュメントから
Hibernate: create table b (b_id integer not null auto_increment, string_results longtext, a_id integer, primary key (b_id))
Hibernate: create table a (id integer not null auto_increment, primary key (id))
Hibernate: alter table b add constraint FK_o3oen721etlltdc7ls82524nh foreign key (detail_id) references a (id)
Hibernate: alter table a add constraint FK_77pkrkrin5nqsx16b6nw6k9r7 foreign key (id) references b (b_id)
あなたのデータベースとは何ですか?それはオラクルですか? –
@ArifAcar Google MySQL – hex
あなたのマッピングは正しいですか?エンティティを見ると、両方のテーブルの主キーフィールドは 'BID'と同様に' ID'と呼ばれています。 'B_ID'はマップされていません。まず、正しくマッピングしているかどうかを確認するか、DB作成スクリプトとエンティティの作成と保存を行うコードスニペットを投稿してください。 – ujulu