春季数据JPA中的嵌套一对多问题

表:


survey(id, title);

survey_question(id, survey_id, title);

survey_question_option(id, survey_question_id, content)

实体:


@Entity

public class Survey implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;


    private String title;


    @OneToMany(mappedBy = "survey", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)

    private List<SurveyQuestion> questions;


}


@Entity

public class SurveyQuestion implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;


    @JoinColumn(nullable = false)

    @ManyToOne

    @JsonIgnore

    private Survey survey;


    private String title;


    @OneToMany(mappedBy = "surveyQuestion", fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL)

    private List<SurveyQuestionOption> options;


}


@Entity

public class SurveyQuestionOption implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;


    @JoinColumn(nullable = false)

    @ManyToOne

    @JsonIgnore

    private SurveyQuestion surveyQuestion;


    private String content;


}


现在添加调查


@PostMapping

@ResponseStatus(HttpStatus.CREATED)

public Survey create(@RequestBody Survey survey) {

    return repository.save(survey);

}

请求正文中的 JSON


{

    "title": "I'm a survey!",

    "questions": [{

        "title": "I'm a question!",

        "options": [{

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        }]

    },

    {

        "title": "I'm a question!",

        "options": [{

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        },

        {

            "content": "I'm an option."

        }]

    }]

}


慕容708150
浏览 90回答 1
1回答

慕标琳琳

您正在同时用于两者fetch = FetchType.EAGERprivate&nbsp;List<SurveyQuestion>&nbsp;questions;和private&nbsp;List<SurveyQuestionOption>&nbsp;options;因此,默认情况下,您始终在此处获取整个树。现在,这里的关键是您将这些依赖项声明为 .这意味着有序但允许重复。在这里,您可以获得每个选项数量的重复问题。List尝试使用或避免重复。SetSortedSet
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java