0
SpringBootバージョン:1.4.2.RELEASE MySQLのバージョン:5.7.16 ロンボクSpringBoot_JPA:OneToMany(双方向)子テーブルに外部キーを挿入していない
私は、質問表からquestion_id 2つのエンティティクラスの質問とオプションを持っていますQuestion_Optionテーブルの外部キーです。
質問エンティティ
@Entity
@Table(name = "questions")
public class Question {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Getter
@Setter
private int questionId;
@Getter
@Setter
@OneToMany(mappedBy = "question",fetch=FetchType.LAZY, cascade=CascadeType.ALL)
private List<Option> option;
オプションエンティティ
@Entity
@Table(name = "questions_options")
public class Option {
@Id
@GeneratedValue
@Getter
@Setter
private int id;
@Getter
@Setter
private String optionsId;
@Getter
@Setter
private String optionText;
@ManyToOne
@JoinColumn(name="questionId")
@Getter
@Setter
private Question question;
}
私はPOSTにしようとすると問題文 、外部キー(question_id)がオプションテーブルに挿入されていません。
Hibernate: insert into questions (questionId, LastUpdate, active, createTime, questionText, questionType) values (default, ?, ?, ?, ?, ?)
Hibernate: insert into questions_options (id, lastUpdate, optionText, optionsId, questionId) values (default, ?, ?, ?, ?)
Hibernate: insert into questions_options (id, lastUpdate, optionText, optionsId, questionId) values (default, ?, ?, ?, ?)
休止:questions_options(ID、最終更新日、optionText、optionsId、questionId)の値に挿入
私はこれをどのように修正しました(デフォルト、、、、????)? 私は
@ManyToOne
@Getter
@Setter
@JoinColumn(name="questionId")
private Question question;
に
とオプションに質問エンティティを変更しかし、私は最初のアプローチが動作していないと私は間違って何をやっている理由を知りたいです。
http://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby –
あなたの第二のアプローチは、仕事かもしれませんが、それは間違っています。元のマッピングに戻し、保存する前に関係の両側を設定する、つまりoption.setQuestion(question)を呼び出したことを確認してください。 –
アランが正しいです。カスケーディング(Cascading.ALL)しても、Option側は依然として関係を所有しており、外部キーの値はOptionの質問メンバーから取得されます(これはQuestionのmappedBy = "question"によって指定されます)。 – Michal