JPA の@JoinColumnsアノテーションとmappingByパラメータを理解していると思っていましたが、この Json of a Questionから新しいエンティティを作成する必要がありました。新しいエンティティにもマッピングする必要がある一連の回答選択肢があります。Question エンティティが所有側になると判断したため、mappedBy パラメータを省略しました。AnswerChoice側で@JoinColumns アノテーションを使用すると、すべてのエンティティが Json オブジェクトから作成されましたが、 AnswerChoices の Question エンティティへの FK が設定されませんでした。
@JoinColumns を Question エンティティに入れることで問題は解決しましたが、私の質問は次のとおりです。これは正しい方法ですか? 副作用はありますか?代わりに、AnswerChoices のセットで for ループを実行し、FK を設定する必要がありますか?
質問Json
{
"text": "Do you know JPA?",
"answerChoices": [{
"text": "yes",
}, {
"text": "no",
}, ]
}
JpaRepository を持つコントローラー:
@PostMapping("/questions/create")
@ResponseBody
public String create(@RequestBody Question json) {
questionRepo.save(json);
}
質問エンティティ:
@Entity
public class Question {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name="question_id")
private Set<AnswerChoice> answerChoices;
}
AnswerChoice エンティティ:
@Entity
public class AnswerChoice {
@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
private Question question;
}
簡潔にするために、自動生成された ID は省略しました。