2017-01-09 7 views
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; 

とオプションに質問エンティティを変更しかし、私は最初のアプローチが動作していないと私は間違って何をやっている理由を知りたいです。

+0

http://stackoverflow.com/questions/11938253/jpa-joincolumn-vs-mappedby –

+0

あなたの第二のアプローチは、仕事かもしれませんが、それは間違っています。元のマッピングに戻し、保存する前に関係の両側を設定する、つまりoption.setQuestion(question)を呼び出したことを確認してください。 –

+0

アランが正しいです。カスケーディング(Cascading.ALL)しても、Option側は依然として関係を所有しており、外部キーの値はOptionの質問メンバーから取得されます(これはQuestionのmappedBy = "question"によって指定されます)。 – Michal

答えて

0

以下の関係を試してみてください。

質問エンティティ

@OneToMany(mappedBy = "question",fetch=FetchType.LAZY,cascade=CascadeType.ALL, targetEntity = Option.class) 
private List<Option> option 

オプションエンティティ

@ManyToOne 
@JoinColumn(name = "questionId") 
private Question question; 
関連する問題