spring-boot-jpa - 当我使用一对一映射时,相同的输出重复多次
问题描述
我刚开始学习spring-boot-jpa。我尝试在我的程序中使用一对一映射,当我使用 Getmapping 获取输出时,我得到了多次重复的相同数据。我不确定代码有什么问题。
一对一的亲子关系
@OneToOne(mappedBy = "question", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Options options;
一对一儿童关系
@OneToOne (cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "questionId")
private Question question;
下面是控制器类
@RestController
public class QuizController {
List<Question> question = new ArrayList<Question>();
@Autowired
QuestionRepo questionRepo;
@Autowired
OptionsRepo optionsRepo;
@GetMapping("/question")
public List<Question> getQues() {
return questionRepo.findAll();
}
@PostMapping("/question")
public void setQues(@RequestParam String ques, String choice1, String choice2, String choice3, String choice4) {
Question setQues = new Question();
setQues.setQuestion(ques);
Options setOp = new Options();
setOp.setOption1(choice1);
setOp.setOption2(choice2);
setOp.setOption3(choice3);
setOp.setOption4(choice4);
setQues.setOptions(setOp);
setOp.setQuestion(setQues);
questionRepo.save(setQues);
这是我得到的输出,相同的选项重复多次,
[{"questionId":1,"options":{"option1":"Red","option2":"Black","option3":"Yellow","option4":"Green","question":{"questionId":1,"options":{"option1":"Red","option2":"Black","option3":"Yellow","option4":"Green"}]
解决方案
你的映射有问题。在设计双向映射时,应该有一侧是关系的拥有侧,另一侧是映射侧。您不应该@OneToOne
在双方都使用,而应该在一侧使用映射的。按照此答案更正您的映射
还要解决无限递归问题,请在一侧告诉您的序列化程序(默认情况下为杰克逊)在序列化对象时忽略一侧。@JsonManagedReference
@JsonBackReference
推荐阅读
- php - 从数据透视表中检索数据多对多关系 laravel 5
- javascript - 如果在 HTML 页面上完成了 drop-drop,则捕获事件
- domain-driven-design - CQRS/ES - 两个限界上下文之间的通信方式
- java - 范围内的 Spring 事件可能吗?
- javascript - 有没有办法单独删除画布对象(一个一个)fabric js
- javascript - 为什么我的 CSS 选择器无效?
- html - css - 组织结构图 - 垂直线在某些情况下不合适
- laravel - 检查用户是否“拥有”另一个用户的最佳方法
- python - 远程运行命令上的 Python Fabric 返回值
- powershell - 寻找 Powershell 脚本来检查是否启用了卷影复制