私は1:mの関係にあります。私は "1"についてのデータと "m"関係についても1つの投稿に投稿します。私が達成しようとしているのは、 "1"にデータ(m)を挿入し、次に1を約1と約mのデータベースに情報を作成するデータベースに保存することです。1:m関係に挿入するJavaスプリング
"1" Enitity:
private List<OptionEntity> options;
@OneToMany(mappedBy = "survey", cascade = CascadeType.MERGE)
public List<OptionEntity> getOptions() {
return options;
}
public void setOptions(List<OptionEntity> options) {
this.options= options;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "survey_id", nullable = false)
public int getSurveyId() {
return surveyId;
}
public void setSurveyId(int surveyId) {
this.surveyId = surveyId;
}
"M" entitites
プライベートSurveyEntity調査。アドオンは
public void add (SurveyEntity s)
{
em.persist(s);
}
あるとき、私は
List<OptionEntity> ops = new ArrayList<>();
for(String option : options){
OptionEntity tmp_option = new OptionEntity();
tmp_option.setText(option);
ops.add(tmp_option);
}
survey.setOptions(ops);
surveyDAO.add(survey);
を行う際
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="survey_id")
public SurveyEntity getSurvey() {
return survey;
}
public void setSurvey(SurveyEntity survey) {
this.survey = survey;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "option_id", nullable = false)
public int getOptionId() {
return optionId;
}
public void setOptionId(int optionId) {
this.optionId = optionId;
}
ただし、データベース内の "1" エンティティのための唯一のレコードを作成します。すべての "m"エンティティのレコードはデータベースに挿入されません。
ここで重要なことは、m個のエンティティに対してIDがAUTOに設定されているため、データベースがIDを作成できることです(オートインクリメントがあります)。
私は間違っているようです。
1:mリレーションに一度に挿入する正しい方法は何ですか?オプションの各エンティティに調査エンティティを追加し、ループ内のよう
1)は、両側の関係を設定します:ヘルプ
マージ操作に対してのみカスケードを設定しました。永続的なものではない。したがって、調査を継続してもオプションは維持されません。また、オプションのアンケートを設定するのを忘れてしまった。 –