插入到1:m关系java spring

插入到1:m关系java spring,java,spring,jpa,eclipselink,Java,Spring,Jpa,Eclipselink,我有1:m的亲戚。我在一篇文章中发布了关于“1”和“m”关系的数据。我试图实现的是将数据(m)插入到“1”中,然后将1持久化到数据库中,这将在数据库中创建关于1和关于m的信息 “1”属性: 但是当我这样做的时候 List<OptionEntity> ops = new ArrayList<>(); for( String option : options ){ OptionEntity tmp_option = new OptionEntity(); tm

我有1:m的亲戚。我在一篇文章中发布了关于“1”和“m”关系的数据。我试图实现的是将数据(m)插入到“1”中,然后将1持久化到数据库中,这将在数据库中创建关于1和关于m的信息

“1”属性:

但是当我这样做的时候

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);
仅为数据库中的“1”实体创建记录。所有“m”实体的记录都不会插入数据库中

我认为这里重要的是将m个实体的标识设置为AUTO,这样数据库就可以创建它们的id(它有autoincrement)

看来这一点我错了

一次插入1:m关系的正确方法是什么


感谢您的帮助

您必须做两件事:

1)设置两侧的关系,以便在循环中将测量实体添加到每个选项实体:

       for( String option : options ){
           OptionEntity tmp_option = new OptionEntity();
           tmp_option.setText( option );
           ops.add(tmp_option);
           tmp_option.setSurvey(survey);
       }
2)使用
em.merge()
而不是
em.persist()
或添加此级联选项:

@OneToMany(mappedBy = "survey", cascade = {CascadeType.MERGE, CascadeType.PERSIST})
public List<OptionEntity> getOptions() {
    return options;
}
@OneToMany(mappedBy=“survey”,cascade={CascadeType.MERGE,CascadeType.PERSIST})
公共列表getOptions(){
返回选项;
}

您仅为合并操作配置了级联。不是为了坚持。因此,在持久化调查时,这些选项不会持久化。您还忘了设置选项的调查。当我使用merge或那些级联时,在查询调用期间或在容器启动期间,它会抛出SQL错误:1064,SQLState:42000?在查询调用期间,我发现我的属性名称是mysql的保留字,我只是转义了名称,它可以工作,谢谢
public void add ( SurveyEntity s )
{
  em.persist( s );
}
       for( String option : options ){
           OptionEntity tmp_option = new OptionEntity();
           tmp_option.setText( option );
           ops.add(tmp_option);
           tmp_option.setSurvey(survey);
       }
@OneToMany(mappedBy = "survey", cascade = {CascadeType.MERGE, CascadeType.PERSIST})
public List<OptionEntity> getOptions() {
    return options;
}